问题如题
现在的问题是导出的数据格式有问题,譬如特别长的编号20080405173323显示是2.00804E+13
还有就是列的宽度我希望是和在DBGrid里的一致最好是导出来的和在DBGrid里的排版都要一样,不知道怎么弄
下面是导出到Excel的方法
function ExportDBGrid(DBGrid: TDBGrid; SheetName: string): boolean;
var
c, r, i, j: integer;
app: Olevariant;
TempFileName, ResultFileName: string;
begin
try
result := True;
app := CreateOLEObject('Excel.application');
// app.WorkBooks.Add(xlWBatWorkSheet);
except
Application.MessageBox('Excel没有正确安装!','警告',MB_OK);
result := False;
exit;
end;
TempFileName := SheetName;
app.Workbooks.add;
app.Visible := false;
Screen.Cursor := crHourGlass;
DBGrid.DataSource.DataSet.First;
c := DBGrid.Columns.Count;
r := DBGrid.DataSource.DataSet.RecordCount;
Application.ProcessMessages;
for i := 0 to c - 1 do
begin
app.cells(1, 1 + i) := DBGrid.Columns[i].Title.Caption;
end;
for j := 1 to r do
begin
for i := 0 to c - 1 do
app.cells(j + 1, 1 + i) := DBGrid.DataSource.DataSet.Fields[i].AsString;
DBGrid.DataSource.DataSet.Next;
end;
ResultFileName := TempFileName;
if ResultFileName = '' then
ResultFileName := '数据导出';
if FileExists(TempFileName) then
DeleteFile(PCHar(TempFileName));
app.Activeworkbook.saveas(TempFileName);
app.Activeworkbook.close(false);
app.quit;
app := unassigned;
end;
现在的问题是导出的数据格式有问题,譬如特别长的编号20080405173323显示是2.00804E+13
还有就是列的宽度我希望是和在DBGrid里的一致最好是导出来的和在DBGrid里的排版都要一样,不知道怎么弄
下面是导出到Excel的方法
function ExportDBGrid(DBGrid: TDBGrid; SheetName: string): boolean;
var
c, r, i, j: integer;
app: Olevariant;
TempFileName, ResultFileName: string;
begin
try
result := True;
app := CreateOLEObject('Excel.application');
// app.WorkBooks.Add(xlWBatWorkSheet);
except
Application.MessageBox('Excel没有正确安装!','警告',MB_OK);
result := False;
exit;
end;
TempFileName := SheetName;
app.Workbooks.add;
app.Visible := false;
Screen.Cursor := crHourGlass;
DBGrid.DataSource.DataSet.First;
c := DBGrid.Columns.Count;
r := DBGrid.DataSource.DataSet.RecordCount;
Application.ProcessMessages;
for i := 0 to c - 1 do
begin
app.cells(1, 1 + i) := DBGrid.Columns[i].Title.Caption;
end;
for j := 1 to r do
begin
for i := 0 to c - 1 do
app.cells(j + 1, 1 + i) := DBGrid.DataSource.DataSet.Fields[i].AsString;
DBGrid.DataSource.DataSet.Next;
end;
ResultFileName := TempFileName;
if ResultFileName = '' then
ResultFileName := '数据导出';
if FileExists(TempFileName) then
DeleteFile(PCHar(TempFileName));
app.Activeworkbook.saveas(TempFileName);
app.Activeworkbook.close(false);
app.quit;
app := unassigned;
end;
解决方案 »
- 在Application.Run之前已经报错要怎么给出提示?
- DbGrid如何让字段计时(按秒),几百条数据列表,怎样做到每条数据自动计时按秒显示而占用最少资源?
- 请问TTime和TDateTime有什么区别阿?我很糊涂...
- 高分酬谢:有近一百个点,求传输数据的最佳方案
- 请教一个二维数组的算法
- 为什么像我们这样的程序员总是找不到女朋友呢?
- 怎样将有scroll的form全部抓成图片?我用GetFormImage只能抓屏幕上显示的部分,请帮我。高分求助!不够再加!!
- 我的IE怎么在按Ctrl + Space 时调用的输入法不是我设置的默认的输入法呀?
- 单机下SocketConnection怎么用?
- 如何用Computer打IP
- 如何用 IDHTTP 的 post 方法提交 http://www.mirdy.cn/add.asp?action=sfadd
- 纸张设置的问题!!!!!!!!!!!!!!!!!
详细:打开Excel,根据所要求的设计表格的各种格式,“譬如特别长的编号20080405173323显示是2.00804E+13 ”这个问题可以通过将特定的列、单元格 显示属性设置为文本来解决,然后将当前Excel文档保存成模版放在程序目录下或者自定义的位置,最后在Delphi中需要导出数据时,根据该Excel模版来生成一个新的自定义表格,并且填充即可,特长编号的问题就解决了。 实际上需要进行表格的数据导出时,格式的设定是很麻烦的事情,主线思想是,Delphi只负责数据的导出(填充),最好不要在Delphi中进行Excel格式的设定,这样需要加入更多的VBA代码,格式的设定可以通过设计相应的Excel模版来解决,每次根据模版声称新的Excel文件,然后Delphi填充。
app.Workbooks.add; {下面加多一句控制EXCEL要写编号数据的列的格式为文本以下以B列为例}
app.Columns.Range_['B1','B65536'].NumberFormatLocal := '@'; // 文体格式