读书人

非OLE模式写EXCEL

发布时间: 2013-09-07 14:12:44 作者: rapoo

非OLE方式写EXCEL
DGStorage为 stringgrid


try
if Length(FullExcelFileName) <= 0 then
begin
if SaveDialog1.Execute then
begin
LocalFileName := SaveDialog1.Files[0];
end else
begin
Result := False;
Exit;
end;
end else
LocalFileName := FullExcelFileName;
RowString := '';
AssignFile(ExcelFile, LocalFileName);
Rewrite(ExcelFile);
try
Write(ExcelFile, RowString);
for i := 0 to DGStorage.RowCount - 1 do
begin
for j := 0 to DGStorage.ColCount - 1 do
begin
if j > 0 then
begin
RowString := RowString + #9 + DGStorage.cells[j, i];
end else
begin
RowString := DGStorage.cells[j, i]; ;
end;
end;
RowString := #13 + #10 + RowString;
Write(ExcelFile, RowString);
RowString := '';
end;
finally
CloseFile(ExcelFile);


end;
Result := True;
except
Result := False;
end;



在D7下 从STRINGGRID导出到EXCEL 中 正常的。
在DXE下从STRINGGRID导出到EXCEL中有个怪异的现象
比如说CTRL+F7 查询到
RowString'11  '#9'1113111112101245  '#9'上海金杨鞋柜  '#9'1  '#9'2013-08-04  '
时 写入EXCEL中的第二个字符由1113111112101245变成了
1113111112101240 ,如果把这个语句中间加个 特殊字符
RowString := RowString + #9 + DGStorage.cells[j, i]+'|';

则又是正常的1113111112101245。

[解决办法]
这很明显,这个值被当成数字进行处理的时候,无法保持这么高的精度,那就当作字符串来处理吧。
[解决办法]
导出时定义excel单元格为文本,就不用单引号了,直接按文本来处理了
[解决办法]
引用:
导出时定义excel单元格为文本,就不用单引号了,直接按文本来处理了

好像没用,我以前遇到过这个问题,类似下面这样的格式我都试过,都不行,最后还是用的加' 的方法
xlsApp.ActiveWorkbook.ActiveSheet.cells[j,1].NumberFormatLocal:='G/通用格式';
xlsApp.ActiveWorkbook.ActiveSheet.cells[j,2].NumberFormatLocal:='@';

[解决办法]
NumberFormatLocal:='@'
用这个可以喔,如果不行的话,还真不知道为什么.

读书人网 >.NET

热点推荐