Страница 1 из 1

При импорте из Delphi не передаются запятые

Добавлено: 26 май 2009, 22:06
Хыиуду
Ситуация такая: есть программа на Delphi, в ней есть стринггрид, определенная процедура переносит данные из стринггрида в Эксель. Код такой:

Код: Выделить всё

function SaveAsExcelFile(stringGrid: TstringGrid; FileName: string): Boolean;
const
  xlWBATWorksheet = -4167; 
var 
  Row, Col: Integer; 
  GridPrevFile: string;
  XLApp, Sheet: OLEVariant;
begin
  Result := False;
  XLApp  := CreateOleObject('Excel.Application'); 
  try
    XLApp.Visible := False;
    XLApp.Workbooks.Add(xlWBatWorkSheet);
    Sheet      := XLApp.Workbooks[1].WorkSheets[1];
    Sheet.Name := 'My Sheet Name';
    for col := 0 to stringGrid.ColCount - 1 do
      for row := 0 to stringGrid.RowCount - 1 do
      begin
        Sheet.Cells[row + 1, col + 1] := stringGrid.Cells[col, row];
        //showmessage(stringgrid.Cells[col, row]);
      end;
    try
      XLApp.Workbooks[1].SaveAs(FileName);
      Result := True;
    except 
      // Error ?
    end;
  finally
    if not VarIsEmpty(XLApp) then
    begin 
      XLApp.DisplayAlerts := False; 
      XLApp.Quit;
      XLAPP := Unassigned;
      Sheet := Unassigned;
    end;
  end;
end;
Проблема в том, что, например, перенося строку "11,2345764242", Эксель теряет в ней запятую, в итоге в ячейке оказывается 112345764242. Формат ячеек при этом автоматом выставляется в "Числовой". Как можно с этим бороться?
--------------------------------------------------------------------------------
Добавлено сообщение
--------------------------------------------------------------------------------
Проблема решилась. Надо было вместо
XLApp.Workbooks.Add(xlWBatWorkSheet);
использовать
XLApp.Workbooks.open(filename);
а в выходном файле везде поставить текстовый формат ячеек.

Re: При импорте из Delphi не передаются запятые

Добавлено: 26 май 2009, 22:39
Naeel Maqsudov
Excel использует национальные настройки Windows.
По-видимому, указана запятая, как разделитель групп разрядов, а точка, как разделитель дробной части.
Бороться с этим можно только одним способом. Перед записью в Excel приводить данные в соответствие национальным настройкам Windows. Т.е. заменять запятые на SysUtils.DecimalSeparator (мог ошибиться в названии переменной, проверьте.)