熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Java編程 >> Java核心技術 >> 正文

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

2013-11-23 18:50:45  來源: Java核心技術 

  使單元格或列自動調整寬度

  在實際應用中常常會遇到單元格的值比較長而被遮住用戶不得不手動調整寬度如果能通過程序就自動調整寬度就會很方便了實際上在通過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_IDxc;

  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


From:http://tw.wingwit.com/Article/program/Java/hx/201311/25849.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.