能用一个类来实现对Excel文件的操作如:
1.在某个Cell里写内容。
2.合拼、拆分单元格。
3.变字体、字号等。
4.在某个单元格内插入图片。
5.设置单元格的背景色。
6.制做一个图表。
.
.
.
.
.
等等了。当然是功能越多越好了。
还有就是最好能加上注释,好让我们这些菜鸟学习学习!!!!如果写的好的话可以再开贴送分的。绝不失言。

解决方案 »

  1.   

    谢谢你  tom20803862(洋洋) !
      

  2.   

    写了这个类也不好用,用OLE方式总是让人感觉别扭。最好用控件:f1book,还可以直接调出数据库中的数据,也可以保存为EXCEL模式,就是打印不好。
      

  3.   

    我没有用过F1book啊!!!
    怎么样操作Excel才是最好的方式呢?
      

  4.   

    操作Excel文件的帖子很多,你搜一下总结一下应该没有问题。
      

  5.   

    晕,delphi不是提供了这样的一个类吗?
    自己到控间里面好好找找,而且,对于excel的操作论坛上是经常讨论的
      

  6.   

    unit dbtoexcel;interface
    uses oleserver, ConvUtils, ComObj,Dialogs,adodb,Classes,SysUtils,forms;
    type
      Tdbtoexcel =class
      private
      public
      function SaveDbToExcel(dataset : TADODataSet) : Byte;
    end;implementation{ Tdbtoexce }
    function Tdbtoexcel.SaveDbToExcel(dataset : TADODataSet): Byte;
    var
      ExcelApp,WorkBook : OleVariant;
      FieldName : string;
      FieldCount,i,j,RecordCount : Integer;
    begin
      try
        try
          ExcelApp := CreateOleObject('Excel.Application');
          WorkBook:=CreateOleObject('Excel.Sheet');
        except
          ShowMessage('ûÓа²×°EXCEL');
          Result := 0; //ʧ°Ü·µ»Ø0
          exit;
        end;
        try
          ExcelApp.Caption := 'Ó¦ÓóÌÐòµ÷ÓàMicrosoft Excel';
          WorkBook:=ExcelApp.workbooks.Add;
          dataset.Open;
          FieldCount := dataset.FieldCount;
          RecordCount := dataset.RecordCount;
          for i:=1 to FieldCount do //¸ù¾ÝDATASETµÄ×Ö¶ÎÃû³ÆдEXCELµÄµÚÒ»ÐÐ.
          begin
            ExcelApp.Cells[1,i] :=dataset.Fields[i-1].FieldName;
          end;
          for i:=2 to RecordCount do //´ÓµÚ¶þÐпªÊ¼£¬°ÑDATASETÖеÄËùÓмǼ¶¼Ð´ÈëEXCELÎļþ.
          begin
            for j:=1 to FieldCount do
            ExcelApp.Cells[i,j] :=dataset.FieldByName(dataset.Fields[j-1].FieldName).AsString;
            dataset.Next;
          end;
          WorkBook.SaveAs(ExtractFileDir(Application.ExeName)+'\test.xls');
          ShowMessage('ÎļþÒѾ­±£´æΪ'+ExtractFileDir(Application.ExeName)+'\test.xls¡£Äú¿ÉÒÔ´ò¿ª±à¼­´ËÎļþ');
          Result := 1;//³É¹¦·µ»Ø1
        except
          Result := 0; //ʧ°Ü·µ»Ø0
        end;
      finally
        ExcelApp.WorkBooks.Close;
        ExcelApp.quit;
      end;
    end;end.
      

  7.   

    直接用VBA写.又方便,功能又强.
      

  8.   

    在DELPHI中操作Excel
    在数据库应用软件的开发过程中,经常需要的数据转换成Excel文字,让用户作进一步的数据处理。而Borland Delphi是开发数据库应用系统的常用工具,如何在Delphi中操作Excel呢?
    我们知道,在Microsoft office软件中有一种内嵌的编程语言,即VBA,它是一种宏语言、VB的子集。利用它,你可以编写出功能强大的代码,如打开文件、修改数据、保存数据、设置字体等。另一方面,Microsoft office软件中的宏能以VBA代码的形式记录下你的操作过程,因此借助宏操作,可以很轻松地实现某一功能,并把这些代码稍作修改嵌入你的软件中。但是VBA有一个缺点,它必需有Microsoft office操作平台,在哪里编写,必须在哪里执行。例如在Excel下编写的一段VBA代码,则它只有在Excel下才能执行。
    关于Excel中的VBA编程方法、Excel对象属性、方法说明可以在Microsoft office的安装(完全安装)目录下的VBAXL8.hlp帮助文件中找到。
    因此,只有把VBA代码嵌入到Borland Delphi中,才能实现用Delphi操作Excel。
      

  9.   

    下面,以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
      

  10.   

    大家没有理解我的意思,我能在Delphi里生成一个Excel文件并且向其中写一内容。
    我的意思是这样如:
    写一个类为MyExcel
    myExcel.Open;
    myexcel.WriteCell(2,4,'姓名');
    myexcel.WriteCell(2,5,'张三');
    myExcel.InsertImage(1,1,'C:\test.bmp');
    myExcel.Save('C:\test.xls')
    myExcel.Close;
    也就是想使用时只要简单的几行调用就行了。  
    不必每次都Copy那么多代码!!!!!
      

  11.   

    在一个程序里有好多处需要导出到Excel时如果有这样一个东西的话不是很方便吗?!!
      

  12.   

    上面说用vba做的那个朋友说的很好现最近也在做一个对Word ,excel考试的软件 上现压的秀紧。用delphi下的控件做只能实现
    一现常用的功能不能对一个适合一考试系统,比如对图表,的操作,还有很多,我的[email protected] 。请联系。
      

  13.   

    在数据库应用软件的开发过程中,经常需要的数据转换成Excel文字,让用户作进一步的数据处理。而Borland Delphi是开发数据库应用系统的常用工具,如何在Delphi中操作Excel呢?我们知道,在Microsoft office软件中有一种内嵌的编程语言,即VBA,它是一种宏语言、VB的子集。利用它,你可以编写出功能强大的代码,如打开文件、修改数据、保存数据、设置字体等。另一方面,Microsoft office软件中的宏能以VBA代码的形式记录下你的操作过程,因此借助宏操作,可以很轻松地实现某一功能,并把这些代码稍作修改嵌入你的软件中。但是VBA有一个缺点,它必需有Microsoft office操作平台,在哪里编写,必须在哪里执行。例如在Excel下编写的一段VBA代码,则它只有在Excel下才能执行。关于Excel中的VBA编程方法、Excel对象属性、方法说明可以在Microsoft office的安装(完全安装)目录下的VBAXL8.hlp帮助文件中找到。因此,只有把VBA代码嵌入到Borland Delphi中,才能实现用Delphi操作Excel。下面,以Delphi为例,说明这种调用方法。Unit excel;InterfaceUsesWindows,Messages,SysUtils,Classes,Graphics,Controls,Forms,Dialogs,StdCtrls,ComObj,{ ComObj是操作OLE对象的函数集}TypeTForm1=class(TForm)Button1:TButton;Procedure Button1Click(Sender:Tobject);Private{ Private declaration}Public{ Public declaration }end; varForm1:Tform1;Implementation{$R *.DFM}procedure TForm1.Button1Click(sender:Tobject);vareclApp,WordBook:Variant; {声明为OLE Automation对象}xlsFileName:string;beginxlsFileName:=’ex.xls’;try{创建OLE对象:Excel Application与WordBook}eclApp:=CreateOleObject(‘Excel.Application’);WorkBook:=CreateOleObject(Excel.Sheet’);ExceptApplication.MessageBox(‘你的机器没有安装Microsoft Excel’,’使用Microsoft Excel’,MB_OK+MB_ICONWarning);Exit;End;TryShowMessage(‘下面演示:新建一个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 thenWorkBook.SaveElseWorkBook.Saved:=True; {放弃保存}Workbook.Close;EclApp.Quit; //退出Excel Application{释放Variant变量}eclApp:=Unassigned;exceptShowMessage(‘不能正确操作Excel文件。可能是该文件已被其他程序打开,或系统错误。’);WorkBook.close;EclApp.Quit;{释放Variant变量}eclApp:=Unassigned;end;end;end. 了解了上述操作过程后,我们就可以很容易地将数据库中的数据转换成Excel文件。
     
      

  14.   

    一个操作Excel的单元    这里给出一个Excel的操作单元,函概了部分常用Excel操作,不是我写的,是从Experts-Exchange看到后收藏起来的,给大家参考。// 该文件操作单元封装了大部分的Excel操作// use to manipulate Excel xls File// Dragon P.C. <2000.05.10>unit ExcelUnit;interfaceusesDialogs, 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 successfulTrue is returned, False otherwise. If SizeStringGridToFit is Truethen the StringGrid is resized to be exactly the correct dimensions toreceive the input Excel cells, otherwise the StringGrid is not resized.If ClearStringGridFirst is true then any cells outside the input rangeare cleared, otherwise existing values are retained. Please not that theExcel cell coordinates are "1" based and the Delphi StringGrid coordinatesare 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 isnot found then the cursor does not move. If nothing is found thenfalse is returned, True otherwise. The search directions can be defined.If you want row searches to go from left to right then SearchRight shouldbe set to true, False otherwise. If you want column searches to go fromtop 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 besearched.}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 worksheetas 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 totake advantage of optional parameters then you should useExcelOpenFileComplex}Function ExcelOpenFile(Excel : Variant; FileName : String): Boolean;{!~Open the file you want to work within Excel. If you want totake advantage of optional parameters then you should useExcelOpenFileComplex}Function ExcelOpenFileComplex(Excel : Variant;FileName : String;UpdateLinks : Integer;ReadOnly : Boolean;Format : Integer;Password : ShortString): Boolean;{!~Saves the range on the currently active sheetto 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 sheetto a DBase 4 table.}Function ExcelSaveAsDBase4(Excel : Variant;ExcelFirstRow : Integer;ExcelFirstCol : Integer;ExcelLastRow : Integer;ExcelLastCol : Integer;
      

  15.   

    接上面
    OutFilePath : ShortString;OutFileName : ShortString): Boolean;{!~Saves the range on the currently active sheetto 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 thecurrent cursor position a block is selected down and to the right.The block proceeds down until an empty row is encountered. Theblock 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 thecurrent cursor position a block is selected that containsthe currently active cell. The block proceeds in eachdirection 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 sheetto 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;
    Function IsBlockRowSide(Excel : Variant;RowNum: Integer;ColNum: Integer): Boolean; Forward; implementation type//Declare the constants used by ExcelSourceType = (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 EXCELOUTPUTS 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;BeginResult := True;TryExcel.Worksheets.Add;ExceptMessageDlg('Unable to add a new worksheet', mtError, [mbOK], 0);Result := False;End;End;{Sets Excel Visibility}Function ExcelSetVisible(Excel : Variant;IsVisible: Boolean): Boolean;BeginResult := True;TryExcel.Visible := IsVisible;ExceptMessageDlg('Unable to Excel Visibility', mtError, [mbOK], 0);Result := False;End;End;{Close Excel}Function ExcelClose(Excel : Variant; SaveAll: Boolean): Boolean;BeginResult := True;TryExcelCloseWorkBooks(Excel, SaveAll);Excel.Quit;ExceptMessageDlg('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;varloop: byte;BeginResult := True;TryFor loop := 1 to Excel.Workbooks.Count DoExcel.Workbooks[1].Close[SaveAll];ExceptResult := False;End;End;{Selects an Excel Sheet By Name}Function ExcelSelectSheetByName(Excel : Variant; SheetName: String): Boolean;BeginResult := True;TryExcel.Sheets[SheetName].Select;ExceptResult := False;End;End;{Selects a cell on the currently active sheet}Function ExcelSelectCell(Excel : Variant; RowNum, ColNum: Integer): Boolean;BeginResult := True;TryExcel.ActiveSheet.Cells[RowNum, ColNum].Select;ExceptResult := False;End;End;{Returns the contents of a cell as a shortstring}Function ExcelGetCellValue(Excel : Variant; RowNum, ColNum: Integer): ShortString;BeginResult := '';TryResult := Excel.Cells[RowNum, ColNum].Value;ExceptResult := '';End;End;{Returns the the current row}Function ExcelGetRow(Excel : Variant): Integer;BeginResult := 1;