导出到excel,他的单元格格式默认是 常规
这样导致我的一些数据 如:000001变成了1,常窜数字都被用科学技术法表示了为了保持数据的原样 就要把excel单元格格式在导出时改成文本
我是用以下代码作导出的 不知能否添加代码实现上述效果我的原代码如下:
procedure Tcardform.SpeedButton1Click(Sender: TObject);
var
xlapp:texcelapplication;
xlbook:texcelworkbook;
xlsheet:texcelworksheet;
i,row:integer;begin xlapp:=texcelapplication.Create(self);
xlbook:=texcelworkbook.Create(self);
xlsheet:=texcelworksheet.Create(self);
try
xlapp.ConnectKind:=cknewinstance;
xlapp.Visible[1]:=true;
try
xlapp.Connect;
except
application.MessageBox('没有安装EXCEL','提示',mb_ok or mb_iconstop);
exit;
end;
xlapp.Workbooks.Add(emptyparam,0);
xlapp.Caption:='文件导出';
xlbook.ConnectTo(xlapp.Workbooks[1]);
xlsheet.ConnectTo(xlapp.Worksheets[1] as _worksheet); with dm.adoquery2 do
begin close;
sql.Clear;
sql.Add('select * from card');
open;
first;
end;
dm.adoquery2.First; for i:=0 to dm.adoquery2.Fields.Count-1 do
xlsheet.Cells.Item[2,i+1]:=dbgrid1.Columns.Items[i].Title.Caption; row:=0;
while not dm.adoquery2.Eof do
begin
for i:=0 to dm.adoquery2.Fields.Count-1 do
begin
xlsheet.Cells.Item[row+3,i+1]:=dm.adoquery2.Fields[i].AsString;
end;
dm.adoquery2.Next;
inc(row);
end;
xlapp.Disconnect;
finally
xlapp.Free;
xlbook.Free;
xlsheet.Free;
end;
end;
这样导致我的一些数据 如:000001变成了1,常窜数字都被用科学技术法表示了为了保持数据的原样 就要把excel单元格格式在导出时改成文本
我是用以下代码作导出的 不知能否添加代码实现上述效果我的原代码如下:
procedure Tcardform.SpeedButton1Click(Sender: TObject);
var
xlapp:texcelapplication;
xlbook:texcelworkbook;
xlsheet:texcelworksheet;
i,row:integer;begin xlapp:=texcelapplication.Create(self);
xlbook:=texcelworkbook.Create(self);
xlsheet:=texcelworksheet.Create(self);
try
xlapp.ConnectKind:=cknewinstance;
xlapp.Visible[1]:=true;
try
xlapp.Connect;
except
application.MessageBox('没有安装EXCEL','提示',mb_ok or mb_iconstop);
exit;
end;
xlapp.Workbooks.Add(emptyparam,0);
xlapp.Caption:='文件导出';
xlbook.ConnectTo(xlapp.Workbooks[1]);
xlsheet.ConnectTo(xlapp.Worksheets[1] as _worksheet); with dm.adoquery2 do
begin close;
sql.Clear;
sql.Add('select * from card');
open;
first;
end;
dm.adoquery2.First; for i:=0 to dm.adoquery2.Fields.Count-1 do
xlsheet.Cells.Item[2,i+1]:=dbgrid1.Columns.Items[i].Title.Caption; row:=0;
while not dm.adoquery2.Eof do
begin
for i:=0 to dm.adoquery2.Fields.Count-1 do
begin
xlsheet.Cells.Item[row+3,i+1]:=dm.adoquery2.Fields[i].AsString;
end;
dm.adoquery2.Next;
inc(row);
end;
xlapp.Disconnect;
finally
xlapp.Free;
xlbook.Free;
xlsheet.Free;
end;
end;
解决方案 »
- TWebbrowser打开paypal出错
- DBgrid如何平常显示密码为*号,点击编辑时才显示密码???
- 如何捕捉CxGrid的双击事件?
- 如何计算两个时间日期型变量的以秒为单位的差值?
- 为什么我运行程序时会同时打开好几个窗口?
- 请教
- 急!!关于多线程同步的问题!!!
- 谁有可以直接编写安装文件的工具???
- 这个语句怎么会报adoquery1.sql.add('select * from nit成绩查询库 where 学员编号<>"df"'); df列无效
- 那里有delphi6的下载?
- delphi 有什么命令可以判断当前的系统是win98还是win2000还是winXP?
- 求救,DevExpress控件包问题,ExpressEditorsLibrary 5.17中的控件与dxNavBar控件冲突问题
xlsheet.Cells.Item[row+3,i+1]:=dm.adoquery2.Fields[i].AsString;
出自于Sub 宏1()
'
' 宏1 Macro
' Simon Lee 记录的宏 2006-10-24
'
'
Range("A2").NumberFormatLocal = "@"
End Sub
begin
for i:=0 to dm.adoquery2.Fields.Count-1 do
begin
if (adoquery2.Fields[i].DataType = ftString) or (adoquery2.Fields[i].DataType = ftWindString) then
xlsheet.Cells.Item[row+3,i+1]:= '''' + dm.adoquery2.Fields[i].AsString
else
xlsheet.Cells.Item[row+3,i+1]:=dm.adoquery2.Fields[i].AsString;
end;
dm.adoquery2.Next;
inc(row);
end;
begin
for i:=0 to dm.adoquery2.Fields.Count-1 do
begin
if adoquery2.Fields[i].DataType in [ftString, ftWideString] then
xlsheet.Cells.Item[row+3,i+1]:= '''' + dm.adoquery2.Fields[i].AsString
else
xlsheet.Cells.Item[row+3,i+1]:=dm.adoquery2.Fields[i].AsString;
end;
dm.adoquery2.Next;
inc(row);
end;