5) 添加新工作表: var Temp_Worksheet: _WorkSheet; begin Temp_Worksheet:=ExcelWorkbook1. WorkSheets.Add(EmptyParam,EmptyParam,EmptyParam,EmptyParam,0) as _WorkSheet; ExcelWorkSheet1.ConnectTo(Temp_WorkSheet); End;
下面,以Delphi为例,说明这种调用方法。 Unit excel; Interface Uses Windows,Messages,SysUtils,Classes,Graphics,Controls,Forms,Dialogs,StdCtrls,ComObj, { ComObj是操作OLE对象的函数集} Type TForm1=class(TForm) Button1:TButton; Procedure Button1Click(Sender:Tobject); Private { Private declaration} Public { Public declaration } end; var Form1:Tform1; Implementation {$R *.DFM} procedure TForm1.Button1Click(sender:Tobject); var eclApp,WordBook:Variant; {声明为OLE Automation对象} xlsFileName:string; begin xlsFileName:=’ex.xls’; try {创建OLE对象:Excel Application与WordBook} eclApp:=CreateOleObject(‘Excel.Application’); WorkBook:=CreateOleObject(Excel.Sheet’); Except Application.MessageBox(‘你的机器没有安装Microsoft Excel’, ’使用Microsoft Excel’,MB_OK+MB_ICONWarning); Exit; End; Try ShowMessage(‘下面演示:新建一个XLS文件,并写入数据,并关闭它。’); WorkBook:=eclApp.workbooks.Add; EclApp.Cells(1,1):=’字符型’; EclApp.Cells(2,1):=’Excel文件’; EclApp.Cells(1,2):=’Money’; EclApp.Cells(2,2):=10.01; EclApp.Cells(1,3):=’日期型’; EclApp.Cells(2,3):=Date; WorkBook.SaveAS(xlsFileName); WorkBook.close; ShowMessage(‘下面演示:打开刚创建的XLS文件,并修改其中的内容,然后,由用户决定是否保存。’); Workbook:=eclApp.WorkBooks.Open(xlsFileName); EclApp.Cells(1,4):=’Excel文件类型’; If MessageDlg(xlsFileName+’已经被修改,是否保存?’, mtConfirmation,[mbYes,mbNo],0)=mrYes then WorkBook.Save Else WorkBook.Saved:=True; {放弃保存} Workbook.Close; EclApp.Quit; //退出Excel Application {释放Variant变量} eclApp:=Unassigned; except showMessage(‘不能正确操作Excel文件。可能是该文件已被其他程序打开,或系统错误。’); WorkBook.close; EclApp.Quit; {释放Variant变量} eclApp:=Unassigned; end; end; end
--------------------------------------------
一个操作Excel的单元 这里给出一个Excel的操作单元,函概了部分常用Excel操作,不是我写的,是从Experts-Exchange 看到后收藏起来的,给大家参考。 // 该文件操作单元封装了大部分的Excel操作 // use to manipulate Excel xls File // Dragon P.C. <2000.05.10> unit ExcelUnit; interface uses Dialogs, Messages, SysUtils, Grids, Cmp_Sec, ComObj, Ads_Misc; {!~Add a blank WorkSheet} Function ExcelAddWorkSheet(Excel : Variant): Boolean; {!~Close Excel} Function ExcelClose(Excel : Variant; SaveAll: Boolean): Boolean; {!~Returns the Column String Value from its integer equilavent.} Function ExcelColIntToStr(ColNum: Integer): ShortString; {!~Returns the Column Integer Value from its Alpha equilavent.} Function ExcelColStrToInt(ColStr: ShortString): Integer; {!~Close All Workbooks. All workbooks can be saved or not.} Function ExcelCloseWorkBooks(Excel : Variant; SaveAll: Boolean): Boolean; {!~Copies a range of Excel Cells to a Delphi StringGrid. If successful True is returned, False otherwise. If SizeStringGridToFit is True then the StringGrid is resized to be exactly the correct dimensions to receive the input Excel cells, otherwise the StringGrid is not resized. If ClearStringGridFirst is true then any cells outside the input range are cleared, otherwise existing values are retained. Please not that the Excel cell coordinates are "1" based and the Delphi StringGrid coordinates are zero based.} Function ExcelCopyToStringGrid( Excel : Variant; ExcelFirstRow : Integer; ExcelFirstCol : Integer; ExcelLastRow : Integer; ExcelLastCol : Integer; StringGrid : TStringGrid; StringGridFirstRow : Integer; StringGridFirstCol : Integer; {Make the StringGrid the same size as the input range} SizeStringGridToFit : Boolean; {cells outside input range in StringGrid are cleared} ClearStringGridFirst : Boolean ): Boolean; {!~Delete a WorkSheet by Name} Function ExcelDeleteWorkSheet( Excel : Variant; SheetName : ShortString): Boolean; {!~Moves the cursor to the last row and column} Function ExcelEnd(Excel : Variant): Boolean; {!~Finds A value and moves the cursor there. If the value is not found then the cursor does not move. If nothing is found then false is returned, True otherwise.} Function ExcelFind( Excel : Variant; FindString : ShortString): Boolean; {!~Finds A value in a range and moves the cursor there. If the value is not found then the cursor does not move. If nothing is found then false is returned, True otherwise.} Function ExcelFindInRange( Excel : Variant; FindString : ShortString; TopRow : Integer; LeftCol : Integer; LastRow : Integer; LastCol : Integer): Boolean; {!~Finds A value in a range and moves the cursor there. If the value is not found then the cursor does not move. If nothing is found then false is returned, True otherwise. The search directions can be defined. If you want row searches to go from left to right then SearchRight should be set to true, False otherwise. If you want column searches to go from top to bottom then SearchDown should be set to true, false otherwise. If RowsFirst is set to true then all the columns in a complete row will be searched.} Function ExcelFindValue( Excel : Variant; FindString : ShortString; TopRow : Integer; LeftCol : Integer; LastRow : Integer; LastCol : Integer; SearchRight : Boolean; SearchDown : Boolean; RowsFirst : Boolean ): Boolean; {!~Returns The First Col} Function ExcelFirstCol(Excel : Variant): Integer; {!~Returns The First Row} Function ExcelFirstRow(Excel : Variant): Integer; {!~Returns the name of the currently active worksheet as a shortstring} Function ExcelGetActiveSheetName(Excel : Variant): ShortString; {!~Gets the formula in a cell.} Function ExcelGetCellFormula( Excel : Variant; RowNum, ColNum: Integer): ShortString; {!~Returns the contents of a cell as a shortstring} Function ExcelGetCellValue(Excel : Variant; RowNum, ColNum: Integer): ShortString; {!~Returns the the current column} Function ExcelGetCol(Excel : Variant): Integer; {!~Returns the the current row} Function ExcelGetRow(Excel : Variant): Integer; {!~Moves the cursor to the last column} Function ExcelGoToLastCol(Excel : Variant): Boolean; {!~Moves the cursor to the last row} Function ExcelGoToLastRow(Excel : Variant): Boolean; {!~Moves the cursor to the Leftmost Column} Function ExcelGoToLeftmostCol(Excel : Variant): Boolean; {!~Moves the cursor to the Top row} Function ExcelGoToTopRow(Excel : Variant): Boolean; {!~Moves the cursor to Home position, i.e., A1} Function ExcelHome(Excel : Variant): Boolean; {!~Returns The Last Column} Function ExcelLastCol(Excel : Variant): Integer; {!~Returns The Last Row} Function ExcelLastRow(Excel : Variant): Integer; {!~Open the file you want to work within Excel. If you want to take advantage of optional parameters then you should use ExcelOpenFileComplex} Function ExcelOpenFile(Excel : Variant; FileName : String): Boolean; {!~Open the file you want to work within Excel. If you want to take advantage of optional parameters then you should use ExcelOpenFileComplex} Function ExcelOpenFileComplex( Excel : Variant; FileName : String; UpdateLinks : Integer; ReadOnly : Boolean; Format : Integer; Password : ShortString): Boolean; {!~Saves the range on the currently active sheet to to values only.} Function ExcelPasteValuesOnly( Excel : Variant; ExcelFirstRow : Integer; ExcelFirstCol : Integer; ExcelLastRow : Integer; ExcelLastCol : Integer): Boolean; {!~Renames a worksheet.} Function ExcelRenameSheet( Excel : Variant; OldName : ShortString; NewName : ShortString): Boolean; {!~Saves the range on the currently active sheet to a DBase 4 table.} Function ExcelSaveAsDBase4( Excel : Variant; ExcelFirstRow : Integer; ExcelFirstCol : Integer; ExcelLastRow : Integer; ExcelLastCol : Integer; OutFilePath : ShortString; OutFileName : ShortString): Boolean; {!~Saves the range on the currently active sheet to a text file.} Function ExcelSaveAsText( Excel : Variant; ExcelFirstRow : Integer; ExcelFirstCol : Integer; ExcelLastRow : Integer; ExcelLastCol : Integer; OutFilePath : ShortString; OutFileName : ShortString): Boolean; {!~Selects a range on the currently active sheet. From the current cursor position a block is selected down and to the right. The block proceeds down until an empty row is encountered. The block proceeds right until an empty column is encountered.} Function ExcelSelectBlock( Excel : Variant; FirstRow : Integer; FirstCol : Integer): Boolean; {!~Selects a range on the currently active sheet. From the current cursor position a block is selected that contains the currently active cell. The block proceeds in each direction until an empty row or column is encountered.} Function ExcelSelectBlockWhole(Excel: Variant): Boolean; {!~Selects a cell on the currently active sheet} Function ExcelSelectCell(Excel : Variant; RowNum, ColNum: Integer): Boolean; {!~Selects a range on the currently active sheet} Function ExcelSelectRange( Excel : Variant; FirstRow : Integer; FirstCol : Integer; LastRow : Integer; LastCol : Integer): Boolean; {!~Selects an Excel Sheet By Name} Function ExcelSelectSheetByName(Excel : Variant; SheetName: String): Boolean; {!~Sets the formula in a cell. Remember to include the equals sign "=". If the function fails False is returned, True otherwise.} Function ExcelSetCellFormula( Excel : Variant; FormulaString : ShortString; RowNum, ColNum: Integer): Boolean; {!~Sets the contents of a cell as a shortstring} Function ExcelSetCellValue( Excel : Variant; RowNum, ColNum: Integer; Value : ShortString): Boolean; {!~Sets a Column Width on the currently active sheet} Function ExcelSetColumnWidth( Excel : Variant; ColNum : Integer; ColumnWidth: Integer): Boolean; {!~Set Excel Visibility} Function ExcelSetVisible( Excel : Variant; IsVisible: Boolean): Boolean; {!~Saves the range on the currently active sheet to values only.} Function ExcelValuesOnly( Excel : Variant; ExcelFirstRow : Integer; ExcelFirstCol : Integer; ExcelLastRow : Integer; ExcelLastCol : Integer): Boolean; {!~Returns the Excel Version as a ShortString.} Function ExcelVersion(Excel: Variant): ShortString; Function IsBlockColSide( Excel : Variant; RowNum: Integer; ColNum: Integer): Boolean; Forward; unction IsBlockRowSide( Excel : Variant; RowNum: Integer; ColNum: Integer): Boolean; Forward;
implementation
type //Declare the constants used by Excel SourceType = (xlConsolidation, xlDatabase, xlExternal, xlPivotTable); Orientation = (xlHidden, xlRowField, xlColumnField, xlPageField, xlDataField); RangeEnd = (NoValue, xlToLeft, xlToRight, xlUp, xlDown); ExcelPasteType = (xlAllExceptBorders,xlNotes,xlFormats,xlValues,xlFormulas,xlAll); {CAUTION!!! THESE OUTPUTS ARE ALL GARBLED! YOU SELECT xlDBF3 AND EXCEL OUTPUTS A xlCSV.} FileFormat = (xlAddIn, xlCSV, xlCSVMac, xlCSVMSDOS, xlCSVWindows, xlDBF2, xlDBF3, xlDBF4, xlDIF, xlExcel2, xlExcel3, xlExcel4, xlExcel4Workbook, xlIntlAddIn, xlIntlMacro, xlNormal, xlSYLK, xlTemplate, xlText, xlTextMac, xlTextMSDOS, xlTextWindows, xlTextPrinter, xlWK1, xlWK3, xlWKS, xlWQ1, xlWK3FM3, xlWK1FMT, xlWK1ALL); {Add a blank WorkSheet} Function ExcelAddWorkSheet(Excel : Variant): Boolean; Begin Result := True; Try Excel.Worksheets.Add; Except MessageDlg('Unable to add a new worksheet', mtError, [mbOK], 0); Result := False; End; End; {Sets Excel Visibility} Function ExcelSetVisible(Excel : Variant;IsVisible: Boolean): Boolean; Begin Result := True; Try Excel.Visible := IsVisible; Except MessageDlg('Unable to Excel Visibility', mtError, [mbOK], 0); Result := False; End; End; {Close Excel} Function ExcelClose(Excel : Variant; SaveAll: Boolean): Boolean; Begin Result := True; Try ExcelCloseWorkBooks(Excel, SaveAll); Excel.Quit; Except MessageDlg('Unable to Close Excel', mtError, [mbOK], 0); Result := False; End; End; {Close All Workbooks. All workbooks can be saved or not.} Function ExcelCloseWorkBooks(Excel : Variant; SaveAll: Boolean): Boolean; var loop: byte; Begin Result := True; Try For loop := 1 to Excel.Workbooks.Count Do Excel.Workbooks[1].Close[SaveAll]; Except Result := False; End; End; {Selects an Excel Sheet By Name} Function ExcelSelectSheetByName(Excel : Variant; SheetName: String): Boolean; Begin Result := True; Try Excel.Sheets[SheetName].Select; Except Result := False; End; End; {Selects a cell on the currently active sheet} Function ExcelSelectCell(Excel : Variant; RowNum, ColNum: Integer): Boolean; Begin Result := True; Try Excel.ActiveSheet.Cells[RowNum, ColNum].Select; Except Result := False; End; End; {Returns the contents of a cell as a shortstring} Function ExcelGetCellValue(Excel : Variant; RowNum, ColNum: Integer): ShortString; Begin Result := ''; Try Result := Excel.Cells[RowNum, ColNum].Value; Except Result := ''; End; End; {Returns the the current row} Function ExcelGetRow(Excel : Variant): Integer; Begin Result := 1;
提供在DELPHI中用程序实现EXCEL单元格合并的源码 Begin CapStr:=trim(exApp.Cells[Row,1].value); Col1:=2; Col2:=FldCount; For Col1:=2 to Col2 Do begin NewCapStr:=trim(exApp.Cells[Row,Col1].value); if (NewCapStr=CapStr) then Begin Cell1:=exApp.Cells.Item[Row,Col1-1]; Cell2:=exApp.Cells.Item[Row,Col1]; exApp.Cells[Row,Col1].value:=''; exApp.Range[Cell1,Cell2].Merge(True); end else begin CapStr:=NewCapStr; end; end; end;