首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

非OLE模式写EXCEL

2013-09-07 
非OLE方式写EXCELDGStorage为 stringgridtryif Length(FullExcelFileName) 0 thenbeginif SaveDialog1.

非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:='@'
用这个可以喔,如果不行的话,还真不知道为什么.

热点排行