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 sheet.cells[row + 1, col + 1] := stringgrid.cells[col, row]; 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;
procedure tform1.button1click(sender: tobject); begin if saveasexcelfile(stringgrid1, 'c:\myexcelfile.xls') then showmessage('stringgrid saved!'); end;
Проблема в том что она сохраняет числа без запятой то есть у меня в stringGride число 6,33 а оно сохраняет 6 33 Подскажите где что-то не так!!
for col := 0 to stringgrid.colcount - 1 do for row := 0 to stringgrid.rowcount - 1 do begin sheet.cells[row + 1, col + 1].NumberFormat := 'General'; sheet.cells[row + 1, col + 1] := stringgrid.cells[col, row]; end;
выдает ошибку Project Project2.exe raised exception class EOleException with message 'Нельзя установить свойство NumberFormat класса Range'.
Добавлено через 13 мин. вот выкладываю все функции!!
function xls_to_stringgrid(agrid: tstringgrid; axlsfile: string): boolean; const xlcelltypelastcell = $0000000b; var xlapp, sheet: olevariant; rangematrix: variant; x, y, k, r: integer; begin result := false; xlapp := createoleobject('excel.application'); try xlapp.visible := false;
k := 1; repeat for r := 1 to y do agrid.cells[(r ), (k )] := rangematrix[k, r]; inc(k, 1); agrid.rowcount := k; until k > x;
rangematrix := unassigned;
finally
if not varisempty(xlapp) then begin xlapp.quit; xlapp := unassigned; sheet := unassigned; result := true; end; end; end;
function SaveAsExcel(AGrid: tstringgrid; filename: string): boolean; const xlwbatworksheet = -4167; var row, col: integer; 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 := 'Лист_1'; for col := 1 to AGrid.colcount - 1 do for row := 1 to AGrid.rowcount - 1 do begin sheet.cells[row + 1, col + 1].NumberFormat:='General'; sheet.cells[row + 1, col + 1] := AGrid.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;
procedure TForm1.ButtonOpenClick(Sender: TObject); begin OpenDialog1.Filter:='*.xls'; if not OpenDialog1.Execute then exit; Label2.Caption:=OpenDialog1.FileName; if xls_to_stringgrid(MainStrGrid,Label2.Caption) then showmessage('Таблица открыта!'); end;
procedure TForm1.ButtonSaveAsClick(Sender: TObject); begin if not SaveDialog1.Execute then EXIT; FileName:=SaveDialog1.FileName; Caption:=FileName; try SaveAsExcel(mainStrGrid,FileName); ShowMessage('Таблица сохранена!'); except Exit; end; end;