Delphi无法导出Excel2007

tjfrog 2009-06-16 11:23:33
我有个程序,生成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]);
...全文
1362 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
落幕年代 2012-09-24
  • 打赏
  • 举报
回复
2007 Excel文件格式是 .xlsx
大肚肥肥 2009-10-30
  • 打赏
  • 举报
回复
留个脚印!
kobaer 2009-10-30
  • 打赏
  • 举报
回复
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;



不知道是不是你要的
tjfrog 2009-10-29
  • 打赏
  • 举报
回复
怎么办呢,就是不想重写
lzy6204 2009-06-25
  • 打赏
  • 举报
回复
建议用三方控件试试
XLSReadWrite
cmdream 2009-06-25
  • 打赏
  • 举报
回复
我觉得最好不用DELPHI上自带的控件操作EXCEL
用自动化操作好些,
dongmingho 2009-06-24
  • 打赏
  • 举报
回复
同問~
hong1846 2009-06-24
  • 打赏
  • 举报
回复
跟我一样的问题,哎
tjfrog 2009-06-23
  • 打赏
  • 举报
回复
看来要无答案结贴了
tjfrog 2009-06-18
  • 打赏
  • 举报
回复
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的组件,这样是不是就可以使程序正常运行了?
纯冰糖 2009-06-17
  • 打赏
  • 举报
回复
学习,我也是同感,很困惑。我用的是Delphi6+Office2007
de410 2009-06-17
  • 打赏
  • 举报
回复
连接字符串改变为
'Provider=Microsoft.ACE.OLEDB.12.0;Password="";Data Source='+FileName+';Extended Properties=''Excel 12.0;IMEX=1;HDR=YES'';Persist Security Info=True;'
就可以实现对2007的读取。
mathsfan 2009-06-16
  • 打赏
  • 举报
回复
不会,好象Excel2007的一些底层都有点不一样了...

5,388

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧