office

位置:IT落伍者 >> office >> 浏览文章

在SWT中使用OLE操纵Excel(四)


发布日期:2019年05月16日
 
在SWT中使用OLE操纵Excel(四)

使单元格或列自动调整宽度

在实际应用中常常会遇到单元格的值比较长而被遮住用户不得不手动调整宽度如果能通过程序就自动调整宽度就会很方便了实际上在通过OleViewexe这个工具查询得知Range有AutoFit的方法它的Id是xed那么如果获得了Range的引用只要调用AutoFit这个方法就可以自动调整宽度了下面请看代码与示例效果

package comjrkuiexampleexcel;

import orgeclipseswtSWT;

import orgeclipseswtlayoutFillLayout;

import orgeclipseswtolewinOLE;

import orgeclipseswtolewinOleAutomation;

import orgeclipseswtolewinOleClientSite;

import orgeclipseswtolewinOleFrame;

import orgeclipseswtolewinVariant;

import orgeclipseswtwidgetsDisplay;

import orgeclipseswtwidgetsShell;

publicclass AutofitShell {

publicstaticvoid main(String[] args) {

new AutofitShell()open();

}

publicvoid open()

{

Display display = DisplaygetDefault();

Shell shell = new Shell();

shellsetText(Auto Fit);

shellsetSize( );

shellsetLayout(new FillLayout());

createExcelPart(shell);

shellopen();

while(!shellisDisposed())

if(!displayreadAndDispatch())

displaysleep();

displaydispose();

}

privatestaticfinalintSHEET_ID = xe;

privatestaticfinalintCELL_ID =xc;

privatestaticfinalintCELL_VALUE_ID = x;

privatevoid createExcelPart(Shell shell)

{

OleFrame frame = new OleFrame(shellSWTNONE);

OleClientSite clientSite = new OleClientSite(frameSWTNONEExcelSheet);

clientSitedoVerb(OLEOLEIVERB_SHOW);

OleAutomation workbook = new OleAutomation(clientSite);

OleAutomation worksheet = workbookgetProperty(SHEET_IDnew Variant[]{new Variant()})getAutomation();

OleAutomation cellA = worksheetgetProperty(CELL_IDnew Variant[]{new Variant(A)})getAutomation();

cellAsetProperty(CELL_VALUE_ID new Variant(if you dont fit the width of the cell you couldnt see all));

autoFitWidth(cellA);

// autoFitWidth(getColumnOfCell(cellA));

}

publicstaticfinalintAUTO_FIT_RANGE = xed;

/**

*自适应宽度

*@paramautomation

*/

privatevoid autoFitWidth(OleAutomation automation)

{

//如果使用automationgetProperty(AUTO_FIT_RANGE)也是同样的效果

automationinvoke(AUTO_FIT_RANGE);

}

publicstaticfinalintCOLUMN_OF_CELL = xf;

/**

*获得单元格所在的列

*@paramcell

*@return

*/

private OleAutomation getColumnOfCell(OleAutomation cell)

{

return cellgetProperty(COLUMN_OF_CELL)getAutomation();

}

}

运行效果(自动调整A单元格的宽度)

运行效果(去掉createExcelPart()方法中的autoFitWidth(getColumnOfCell(cellA))的注释自动调整A单元格所在列的列宽)

说明

调整列宽在本例中是通过autoFitWidth(OleAutomation automation)方法

在autoFitWidth(OleAutomation automation)中调用了OleAutomation的invoke()方法参数是所代表ole对象的方法的id意思是调用该方法用 automationgetProperty(AUTO_FIT_RANGE)也是同样的效果

autoFitWidth(OleAutomation automation)的参数是一个Range对象可以是一个单元格也可以是一个单元格的区域在本例中示范了两种效果(单元格列)

获得一个单元格区域的的所在列的方法在Range中是Range* EntireColumn()其id是xf

               

上一篇:通过jacob对excel,word进行打印等操作

下一篇:在SWT中使用OLE操纵Excel(二)