Delphi无法导出Excel2007

时间:2022-06-20 16:59:37
我有个程序,生成Excel,但安装了Excel2007后无法使用了。我希望不用改代码就能使用。

我想问的是:
1、能不能在PC上同时安装Excel2003和Excel2007。这样是不是程序就能使用了?
2、能不能在安装包里将Excel2000对应的组件打包进去,当安装程序时也将Excel2000对应的组件也注册。Excel2000对应的组件是哪个?

谢谢大家!以下是我所采用的示例代码
uses
  Excel2000;

procedure TWriteToExcel_Vendor_Details.Write();
var
  ExcelApplication: TExcelApplication;
  ExcelWorkbook1: TExcelWorkbook;
  ExcelWorksheet1: TExcelWorksheet;
  ExcelWorksheet2: TExcelWorksheet;
  ExcelWorksheet3: TExcelWorksheet;
  Temp_Worksheet: _WorkSheet;
  range:ExcelRange;
  i, j: integer;
  filename: string;
  msg:string;
  position:string;
  temp:OleVariant;
begin
  msg := #$D#$A + datetimetostr(gettime())+ '>>>开始创建Exel文件.....' + #$D#$A + writetoexcel.FrmMain.msg.Text;
  WriteToExcel.FrmMain.msg.Text := msg;
  filename := concat(extractfilepath(application.exename),'AC_Vendor_Details_'+writetoexcel.FrmMain.ComboBox1.Items[writetoexcel.FrmMain.ComboBox1.ItemIndex], '.xls');    

  try
    ExcelApplication := TExcelApplication.Create(Application);
    ExcelWorkbook1 := TExcelWorkbook.Create(Application);
    ExcelWorksheet1 := TExcelWorksheet.Create(Application);
    ExcelWorksheet2 := TExcelWorksheet.Create(Application);
    ExcelWorksheet3 := TExcelWorksheet.Create(Application);
    ExcelApplication.ConnectKind := ckRunningOrNew;
    ExcelApplication.Connect;
    ExcelApplication.Workbooks.Add(EmptyParam, 1);
    ExcelWorkbook1.ConnectTo(ExcelApplication.Workbooks[1]);

13 个解决方案

#1


不会,好象Excel2007的一些底层都有点不一样了...

#2


连接字符串改变为 
'Provider=Microsoft.ACE.OLEDB.12.0;Password="";Data Source='+FileName+';Extended Properties=''Excel 12.0;IMEX=1;HDR=YES'';Persist Security Info=True;' 
就可以实现对2007的读取。 

#3


学习,我也是同感,很困惑。我用的是Delphi6+Office2007

#4


TO De410,感谢你的支持,我的问题不是读取,是怎样生成。

有资料说可以用以下方式解决:
可以使用Automation技术控制Excel。如:   
        var   MyExcel,   MyWorkbook:Variant;   
          
        procedure   TForm1.Button1Click(Sender:   TObject);   
        begin   
          MyExcel   :=   CreateOleObject( 'Excel.Application ');   
          MyExcel.Visible   :=   true;   
          MyWorkbook   :=   MyExcel.Workbooks.Open( 'e:\book1.xls ');   
          MyExcel.ActiveCell.FormulaR1C1   :=   'sssssss ';   
        end;   
但这个方案需要重写代码,可我不希望这样。

我想能不能在客户的机器上注册Office2000的组件,这样是不是就可以使程序正常运行了?

#5


看来要无答案结贴了

#6


同問~

#7


跟我一样的问题,哎

#8


我觉得最好不用DELPHI上自带的控件操作EXCEL
用自动化操作好些,

#9


建议用三方控件试试
XLSReadWrite

#10


怎么办呢,就是不想重写

#11


1、导出的话  dbgrideh有专门导出到excel的方法的 导出的是2007以下版本  (安装了2007也是一样)   
2、加入用comobj 来做的话
   

var  ex:Variant;  

ex := CreateOleObject('Excel.Application');
  ex.WorkBooks.Add;
  ex.WorkSheets[1].Activate;

//这里为excel添加数据  
   ex.workbooks[1].saveas(sd_xls.FileName); //保存文件  这里好像是看你安装的是那个版本  是2007 他就直接生成2007的了
    ex.workbooks[1].close; //关闭工作表
    ex.quit; //关闭Excel
    ex := unassigned;



不知道是不是你要的  

#12


留个脚印!

#13


2007 Excel文件格式是 .xlsx

#1


不会,好象Excel2007的一些底层都有点不一样了...

#2


连接字符串改变为 
'Provider=Microsoft.ACE.OLEDB.12.0;Password="";Data Source='+FileName+';Extended Properties=''Excel 12.0;IMEX=1;HDR=YES'';Persist Security Info=True;' 
就可以实现对2007的读取。 

#3


学习,我也是同感,很困惑。我用的是Delphi6+Office2007

#4


TO De410,感谢你的支持,我的问题不是读取,是怎样生成。

有资料说可以用以下方式解决:
可以使用Automation技术控制Excel。如:   
        var   MyExcel,   MyWorkbook:Variant;   
          
        procedure   TForm1.Button1Click(Sender:   TObject);   
        begin   
          MyExcel   :=   CreateOleObject( 'Excel.Application ');   
          MyExcel.Visible   :=   true;   
          MyWorkbook   :=   MyExcel.Workbooks.Open( 'e:\book1.xls ');   
          MyExcel.ActiveCell.FormulaR1C1   :=   'sssssss ';   
        end;   
但这个方案需要重写代码,可我不希望这样。

我想能不能在客户的机器上注册Office2000的组件,这样是不是就可以使程序正常运行了?

#5


看来要无答案结贴了

#6


同問~

#7


跟我一样的问题,哎

#8


我觉得最好不用DELPHI上自带的控件操作EXCEL
用自动化操作好些,

#9


建议用三方控件试试
XLSReadWrite

#10


怎么办呢,就是不想重写

#11


1、导出的话  dbgrideh有专门导出到excel的方法的 导出的是2007以下版本  (安装了2007也是一样)   
2、加入用comobj 来做的话
   

var  ex:Variant;  

ex := CreateOleObject('Excel.Application');
  ex.WorkBooks.Add;
  ex.WorkSheets[1].Activate;

//这里为excel添加数据  
   ex.workbooks[1].saveas(sd_xls.FileName); //保存文件  这里好像是看你安装的是那个版本  是2007 他就直接生成2007的了
    ex.workbooks[1].close; //关闭工作表
    ex.quit; //关闭Excel
    ex := unassigned;



不知道是不是你要的  

#12


留个脚印!

#13


2007 Excel文件格式是 .xlsx