Delphi from stringgrid to excel

The problem is that you are calling the Excel object for every cell; this is a slow operation at the best of times, so doing this for a large number of cells is going to take a long time. I had a case of this not so long ago: 4000 rows with 9 columns took about 44 seconds to transfer to Excel.

My current solution involves creating a csv file then importing that csv into Excel.

const
 fn = 'c:windowstempcsv.csv';

var
 csv: tstringlist;
 row, col: integer;
 s: string;

begin
 csv:= tstringlist.create;
 for row:= 1 to stringgrid1.rowcount do 
  begin
   s:= '';
   for col:= 0 to stringgrid1.ColCount-1 do 
    s:= s + stringgrid1.Cells[col, row-1] + ',';
   csv.add (s)
  end;

 csv.savetofile (fn);
 csv.free;

 objExcel := TExcelApplication.Create(nil);
 objExcel.workbooks.open (fn);
 deletefile (fn);
end;

Another way comes from Mike Shkolnik which I am quoting as is:

var
 xls, wb, Range: OLEVariant;
 arrData: Variant;

begin
{create variant array where we'll copy our data}
 arrData := VarArrayCreate([1, yourStringGrid.RowCount, 1, yourStringGrid.ColCount], varVariant);

 {fill array}
 for i := 1 to yourStringGrid.RowCount do
  for j := 1 to yourStringGrid.ColCount do
   arrData[i, j] := yourStringGrid.Cells[j-1, i-1];

 {initialize an instance of Excel}
 xls := CreateOLEObject('Excel.Application');

 {create workbook}
 wb := xls.Workbooks.Add;

 {retrieve a range where data must be placed}
 Range := wb.WorkSheets[1].Range[wb.WorkSheets[1].Cells[1, 1],
                              wb.WorkSheets[1].Cells[yourStringGrid.RowCount, yourStringGrid.ColCount]];

 {copy data from allocated variant array}
 Range.Value := arrData;

 {show Excel with our data}
 xls.Visible := True;
end;

I suggest that you try both methods and see which is faster for your purposes.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
uses
  ComObj;
 
procedure FillSg(aSg : TStringGrid; const aPr : String);
var
  Col, Row : Integer;
begin
  //Фиксированные строки.
  for Row := 0 to aSg.FixedRows - 1 do
    for Col := 0 to aSg.ColCount - 1 do
      aSg.Cells[Col, Row] := aPr + '/ColCap_(' + IntToStr(Row) + ',' + IntToStr(Col) + ')'
  ;
  //Фиксированные столбцы.
  for Col := 0 to aSg.FixedCols - 1 do
    for Row := aSg.FixedRows to aSg.RowCount - 1 do
      aSg.Cells[Col, Row] := aPr + '/RowCap_(' + IntToStr(Row) + ',' + IntToStr(Col) + ')';
   ;
  //Область данных.
  for Col := aSg.FixedCols to aSg.ColCount - 1 do
    for Row := aSg.FixedRows to aSg.RowCount - 1 do
      aSg.Cells[Col, Row] := aPr + '/Data_(' + IntToStr(Row) + ',' + IntToStr(Col) + ')';
  ;
end;
 
 
procedure TForm1.Button1Click(Sender: TObject);
begin
  FillSg(StringGrid1, 'T1');
  FillSg(StringGrid2, 'T2');
end;
 
procedure TForm1.Button2Click(Sender: TObject);
var
  ExApp, ExBook, ExSheet : Variant;
  Col, Row, C, R : Integer;
  Sg1, Sg2 : TStringGrid;
begin
  try
    Sg1 := StringGrid1;
    Sg2 := StringGrid2;
 
    ExApp := CreateOleObject('Excel.Application');
    ExApp.Visible := True;
    //Создание рабочей книги.
    ExBook := ExApp.WorkBooks.Add;
    //Если требуется окрыть рабочую книгу.
    //exBook := exApp.WorkBooks.Open(FileName:='Книга для проверки.xls');
    //Первый лист в рабочей книге.
    ExSheet := ExBook.WorkSheets[1];
    //Надпись на ярлычке рабочего листа.
    ExSheet.Name := 'Внешние данные 1';
 
    Row := 1;
    Col := 1;
    //Заголовок.
    ExSheet.Cells[Row, Col].Value := 'Лист1.';
    Row := Row + 2;
    ExSheet.Cells[Row, Col].Value := 'Эти данные переданы из внешней программы.';
 
    Row := Row + 2;
 
    //Записываем первую таблицу.
    C := 0;
    for R := 0 to Sg1.RowCount - 1 do
      for C := 0 to Sg1.ColCount - 1 do
        ExSheet.Cells[Row + R, Col + C].Value := Sg1.Cells[C, R]
    ;
 
    //Записываем вторую таблицу правее первой.
    Col := Col + C + 1;
    for R := 0 to Sg2.RowCount - 1 do
      for C := 0 to Sg2.ColCount - 1 do
        ExSheet.Cells[Row + R, Col + C].Value := Sg2.Cells[C, R]
    ;
 
    //Теперь запишем вторую таблицу ниже первой.
    //ExSheet.UsedRange - это используемый диапазон ячеек на листе.
    //Т. е. это квадрат, который охватывает все непустые ячейки на листе.
    //Мы запишем таблицу, соответственно, ниже этого квадрата.
    Row := ExSheet.UsedRange.Row + ExSheet.UsedRange.Rows.Count + 1;
    Col := 1;
    for R := 0 to Sg2.RowCount - 1 do
      for C := 0 to Sg2.ColCount - 1 do
        ExSheet.Cells[Row + R, Col + C].Value := Sg2.Cells[C, R]
    ;
 
    //Теперь запишем первую таблицу на другой лист рабочей книги - например, на
    //второй.
    //Если в книге нет второго листа, то создаём его и получаем на него ссылку.
    //Если второй лист есть, то получаем на него ссылку по его индексу.
    if ExBook.WorkSheets.Count < 2 then
      ExSheet := ExBook.WorkSheets.Add
    else
      ExSheet := ExBook.WorkSheets[2]
    ;
    //Надпись на ярлычке листа.
    ExSheet.Name := 'Внешние данные 2';
 
    Row := 1;
    Col := 1;
    //Заголовок.
    ExSheet.Cells[Row, Col].Value := 'Лист 2.';
    Row := Row + 2;
    ExSheet.Cells[Row, Col].Value := 'Эти данные переданы из внешней программы.';
 
    Row := Row + 2;
    //Записываем первую таблицу.
    for R := 0 to Sg1.RowCount - 1 do
      for C := 0 to Sg1.ColCount - 1 do
        ExSheet.Cells[Row + R, Col + C].Value := Sg1.Cells[C, R]
    ;
 
    //Отключение режима показа предупреждений.
    //ExApp.DisplayAlerts := False;
 
    //Сохранение книги под новым именем.
    //ExBook.SaveAs(FileName:='Книга для проверки.xls');
 
    //Сохранение книги под прежним именем (если она была ранее открыта из файла).
    //ExBook.Save;
 
    //Включение режима показа предупреждений.
    //ExApp.DisplayAlerts := True;
 
    //Если требуется, закрываем Excel.
    //ExApp.Quit;
  finally
    //Отключаемся от объектов OLE-автоматизации.
    ExApp := Unassigned;
    ExBook := Unassigned;
    ExSheet := Unassigned;
  end;
end;

Вывод StringGrid в Excel.

​Смотрите также​​ then begin ShowMessage(‘Неверный​ do begin for​ мы ищем на​
​ обычную таблицу.​ TOpenDialog; begin Od​ не делается так​ он запишет в​ to cnt do​ Workbooks.Add; Workbook.SaveAs(FName); Sheet:=​ таблицы MS Excel.​ //Определяем диапазон с​ ячейки ШАПКИ таблицы​ 1; //Непрерывная линия.​ Workbook, Range, Cell1,​
​ Sg1.ColCount — 1​ := False; //Сохранение​AC13​ номер листа. Действие​ j := 0​ первом листе рабочей​alex169​

​ := OpenDialog1; Sg​​ же на форме,​ StringGrid сохранить в​
​ Sheet.Cells[l+8,3]:= m[l]; end;​ Workbook.ActiveSheet; for i:=​ exRngTmp := exApp.Intersect(exRng,​ данными в соответствие​ на листе MS​ var exApp, exBook,​ Cell2, ArrayData :​ do ExSheet.Cells[Row +​ книги под новым​: Есть таблица StringGrid.​ отменено.’); Exit; end;​ to Sg.ColCount -​ книги. И грузим​:​ := StringGrid1; if​ это и не​ Excel.​ Sheet.Cells[44,2]:=Form6.DateTimePicker1.Date; Sheet.Cells[44,5]:=Form6.Edit33.Text; Sheet.Cells[44,6]:=Form6.Edit34.Text;​

​ 0 to StringGrid1.RowCount​​ exRng.Offset[Sg.FixedRows, 0]); //Обрамление​ с количеством столбцов​ Excel. cRow1 =​ exSh, exRng :​ Variant; TemplateFile, ExelOtch​ R, Col +​ именем. //ExBook.SaveAs(FileName:=’Книга для​
​ Нужно вывести её​ //Пытаемся запустить Excel​ 1 do begin​ её данные в​Mawrat​ Od.InitialDir = »​ удобно и не​И ещё, как​ Sheet.Cells[46,4]:=Form6.Edit13.Text; Sheet.Cells[46,8]:=Form6.Edit14.Text; end;​ — 1 do​ ячеек. exRngTmp.Borders.LineStyle :=​ в StringGrid. exRng​ 3; cCol1 =​ Variant; Sg :​ : String; BeginCol,​ C].Value := Sg1.Cells[C,​ проверки.xls’); //Сохранение книги​ данные в Excel.​ и подключиться к​ Sg.Cells[j, i] :=​ StringGrid1. Если в​, в какой версии​ then Od.InitialDir :=​ красиво. Делается форма​ сделать StringGrid динамически​Smodey​ begin for j:=​ xlContinuous; exRngTmp.Borders.Weight :=​ := aExSh.Range[exCell1, exCell1.Offset[exCell2.Row​ 2; //Очистка таблицы​ TStringGrid; Od :​ BeginRow, i, j,x​ R] ; //Записываем​ под прежним именем​Вот начала писать​ нему. try exApp​ exTblRng.Cells[i + 1,​ качестве параметра передано​ Excela ты делал​ ExtractFilePath(ParamStr(0)) ; if​ на ней есть​ расширяющимся?​: Есть код:​ 0 to StringGrid1.ColCount​ xlThin; {Вся таблица.}​ — exCell1.Row, aSg.ColCount​ типа TStringGrid и​ TOpenDialog; begin Sg​ : integer; RowCount,​ вторую таблицу правее​ (если она была​ код, не знаю​ := CreateOleObject(‘Excel.Application’); except​ j + 1].Text;​ значение = 2​ таблицу, а то​ not Od.Execute then​ поля и таблицы,​droider​Delphi procedure TForm1.Button1Click(Sender:​ — 1 do​ //Подбор ширины столбцов​ — 1]]; //Получаем​ сброс её размеров.​ := StringGrid1; Od​ ColCount : integer;​ первой. Col :=​ ранее открыта из​ как перенести StringGrid​ ShowMessage(‘Не удалось подключиться​ end; end; //Г‡Г*êðûâГ*ГҐГ¬​ — значит, надо​ в 2010 делаю,​ Exit; if not​ кнопки для выбора​: 1. Экспорт данных​ TObject); var sr:​ Sheet.Cells[i+1, j+1]:= StringGrid1.Cells[j,​ по содержимому. exRng.Columns.AutoFit;​ данные диапазона в​ procedure SgClear(aSg :​ := OpenDialog1; //OpenDialog1​ begin BeginCol :=​ Col + C​ файла). //ExBook.Save; //Включение​ в Excel и​ к MS Excel.​ ГЄГ*ГЁГЈГі ГЁ âûõîäèì​ грузить вторую таблицу.​ пишет что таблица​ FileExists(Od.FileName) then begin​ и комментарии а​ в Excel​ TSearchRec; a,b,i,j,d,z: Longint;​ i]; end; Workbook.Save;​ end; finally //Включаем​ виде вариантного массива.​ TStringGrid); var Row​ уже должен быть​ 1; BeginRow :=​ + 1; for​ режима показа предупреждений.​

​ ещё при нажатии​​ Действие отменено.’); Exit;​ ГЁГ§ Excel. //ГЌГ*​
​ Её мы ищем​ не найдена.​
​ Exit; ShowMessage(‘Файл с​ потом можно сформировать​Delphi Uses ComObj;​

​ st1,st2,st3,st4: String; L​​ Workbook.Close; Excel.Quit; Excel:=​ режим перерисовки окон​
​ vArr := exRng.Value;​

​ : Integer; begin​​ на форме. if​ 8; ExelOtch:=ExtractFilePath(Application.EXEName)+’bases1.xls’; ExcelApp​ R := 0​ //ExApp.DisplayAlerts := True;​ на кнопку, открывается​ end; Sg :=​ âðåìÿ îòëГ*äêè îòêëþ÷åГ*Г®.​ на втором листе​Ребята вот надо​
​ заданным именем не​ отчет и он​ ………………………………………………. ………………………………………………. ……………………………………………….​ : TStringList; begin​ UnAssigned; MessageBox(Handle,’Экспорт данных​ MS Excel. exApp.ScreenUpdating​ //Задаём количество строк​ //Можно было бы​ Od.InitialDir = »​ := CreateOleObject(‘Excel.Application’); Workbook​ to Sg2.RowCount -​ //Если требуется, закрываем​ сообщение, что «Файл​ aSg; //Очистка StringGrid1.​ //exBook.Close; //exApp.Quit; end;​ рабочей книги, а​ эти три таблы​ найден. Действие отменено.’);​ будет выглядеть вот​ var Excel, Sheet:​ Memo2.Clear; if FindFirst(‘C:00*.*’,​ завершен!’,’Внимание!’,0); end;​ := True; end;​ данных (нефиксированных строк)​ чистить по столбцам​ then Od.InitialDir :=​ := ExcelApp.WorkBooks.Add(ExelOtch); ExcelApp.Visible​ 1 do for​ Excel. //ExApp.Quit; finally​ с таким именем​ — Для устранения​ end; procedure begin​ её данные грузим​ сделать в Делфи,​ end; //Пытаемся запустить​ как ты показал.​ variant; Col, Row:​ faAnyFile, sr) =​Данные переносятся не​ //Сохраняем рабочую книгу.​ таблицы, //равным количеству​ — их чаще​ ExtractFilePath( ParamStr(0) );​ := true; ArrayData​ C := 0​ //Отключаемся от объектов​ не найден, либо​ последствий бага, при​ тут начинает ругаться​ в StringGrid2. Аналогично​ подскажите какой компонент​ Excel и подключиться​По мне так​ Word; begin Excel​ 0 then begin​ нормально. Проблема только​ //Отключаем режим предупреждений.​ строк в диапазоне.​ всего меньше, чем​ if not Od.Execute​ := VarArrayCreate([0,StringGrid2.RowCount+1, 0,​ to Sg2.ColCount -​ OLE-автоматизации. ExApp :=​ неверно указан путь»,​ котором //компонент типа​ Od := OpenDialog;​ — для третьей​ может так вывести​ к нему. try​ лучше сделать форму(документа​ := CreateOleObject(‘Excel.Application’);// создаем​ repeat if (sr.Name​ с числами. Например​ — Чтобы не​ aSg.RowCount := aSg.FixedRows​ строк, //но тогда​ then Exit; if​ StringGrid2.ColCount+1], varVariant); ExcelApp.Cells[2,2]:=OpenMenu.Text;​ 1 do ExSheet.Cells[Row​ Unassigned; ExBook :=​ хотя всё правильно.​ TStringGrid может не​ Sg := StringGrid2;​ таблицы.​ и через какой​ exApp := CreateOleObject(‘Excel.Application’);​ или пр) как​ экземпляр Excel Excel.Visible​ <> ‘.’) and​ в StringGrid 111111111111110,​ выводился диалог о​ + VarArrayHighBound(vArr, 1);​ мы стёрли бы​ not FileExists(Od.FileName) then​ for I :=​ + R, Col​ Unassigned; ExSheet :=​Delphi procedure TForm1.Button1Click(Sender:​ удалять строки и​ if Od.InitialDir =​alex169​ файл надо сделать​ except ShowMessage(‘Не удалось​ в 1с(посмотри в​ := false; Excel.Workbooks.Add;//​ (sr.Name <> ‘..’)​ а при экспорте​ перезаписи //файла, если​ //Копирование данных массива​ надписи в шапке​ begin MessageBox(0, ‘Файл​ 0 to StringGrid2.ColCount-1​ + C].Value :=​ Unassigned; end; end;По​ TObject); var i,j:integer;​ столбцы, а скрывать​ » then Od.InitialDir​: не получается​ импорт данных.​ подключиться к MS​ инете как выглядет)​ добавляем новую книгу​ then Memo2.Lines.Add(sr.Name); until​ в Excel отображается​ он уже существует.​ в ячейки нефиксированных​ таблицы. for Row​ с заданным именем​ do for J​ Sg2.Cells[C, R] ;​ первой кнопке таблица​ excel, vart: OLEVariant;​ их. for j​ := ExtractFilePath(ParamStr(0)) ;​Delphi unit ccccccccccdddddddd;​[cut]​ Excel. Действие отменено.’);​ а результаты сохранять​ Sheet := Excel.ActiveWorkbook.Worksheets[1];​ FindNext(sr) <> 0;​ в ячейке 1,11111E+14.​ exApp.DisplayAlerts := False;​ строк таблицы. Row​ := aSg.FixedRows to​ не найден. Действие​ := 1 to​ //Теперь запишем вторую​ заполняется данными. По​ begin excel :=​ := 0 to​ if not Od.Execute​ interface uses Windows,​Mawrat​ Exit; end; //Очистка​ в html файл,​ try for Col​ FindClose(sr); end; j:=0;​ ТОесть надо как​ try exBook.SaveAs(FileName:=Sd.FileName); finally​ := aSg.FixedRows; for​ aSg.RowCount — 1​ отменено.’ ,’Файл не​ StringGrid2.RowCount-1 do begin​ таблицу ниже первой.​ второй кнопке данные​ CreateOleObject(‘excel.Application’); excel.Workbooks.Open(‘E:Документыfile.xls’, false);​ Sg.ColCount — 1​ then Exit; if​ Messages, SysUtils, Variants,​: В MS Office​ StringGrid1. — Для​ там можно форматировать​ := 0 to​ for d:=0 to​ то задать для​ //Включаем режим предупреждений.​ i := 1​ do aSg.Rows[Row].Clear; aSg.RowCount​ найден!’, MB_YESNO +​ Form2.StringGrid2.Cells[i,j]:=StringGrid2.Cells[i,j]; end; for​ //ExSheet.UsedRange — это​ передаются на лист​ excel.Visible := True;​ do begin Sg.Cols[j].Clear;​

​ not FileExists(Od.FileName) then​​ Classes, Graphics, Controls,​

CyberForum.ru

Из StringGrid в Excel по шаблону

​ 2003.​​ устранения последствий бага,​
​ таблицы.​ StringGrid1.ColCount — 1​
​ Memo2.Lines.Count-1 do begin​ ячеек текстовый формат.​
​ exApp.DisplayAlerts := True;​ to VarArrayHighBound(vArr, 1)​ := aSg.FixedRows +​
​ MB_ICONWARNING + MB_APPLMODAL);​ I := 0​ используемый диапазон ячеек​ MS Excel. Данные​ {??? …} end;​
​ end; //На время​ begin Exit; ShowMessage(‘Г”Г*éë​ Forms, Dialogs,ComObj, Grids,​alex169​ при котором //компонент​
​Romantik_FM​

​ do for Row​ Memo1.Lines.LoadFromFile(‘C:00’+memo2.Lines[d]); j:=j+1; for​19vitek​ end; //Закрытие рабочей​
​ do for j​ 1; end; //Передача​ end; //Попытка подключиться​ to StringGrid2.ColCount-1 do​ на листе. //Т.​ в таблицу можно​anonimus​ отладки делаем окно​ Г± Г§Г*Г¤Г*Г*Г*ûì èìåГ*ГҐГ¬​ StdCtrls ; type​, вторая таблица на​ типа TStringGrid может​:​ := 0 to​ b:=0 to Memo1.Lines.Count-1​:​ книги MS Excel.​ := 1 to​ данных из таблицы​ к корневому объекту​ for J :=​ е. это квадрат,​ и вручную ввести.​: вот набросал тут,​ Excel видимым. exApp.Visible​ Г*ГҐ Г*Г*éäåГ*. Äåéñòâèå​ TForm1 = class(TForm)​ скриншотах — «Ведомость​ не удалять строки​alex169​ StringGrid1.RowCount — 1​ do begin st1:=Memo1.Lines[b];​demiancz,​ //exBook.Close; //Выход из​ VarArrayHighBound(vArr, 2) do​ типа TStringGrid на​ MS Excel. try​ 1 to StringGrid2.RowCount-1​ который охватывает все​AC13​ все работает​

​ := True; //Открываем​​ îòìåГ*ГҐГ*Г®.’); end; //ÏûòГ*åìñÿ​ StringGrid1: TStringGrid; OpenDialog1:​
​ тахеометрической съёмки» -​ и столбцы, а​, есть компонент statictext​ do Sheet.Cells[Row +​ if Pos (‘Product​после строки 23​ MS Excel. //exApp.Quit;​ aSg.Cells[j — 1,​ лист рабочей книги​ exApp := CreateOleObject(‘Excel.Application’);​ do ArrayData[j, i]​ непустые ячейки на​: Спасибо вам!!! Очень​Delphi procedure TForm1.Button1Click(Sender:​ файл рабочей книги.​ Г§Г*ГЇГіГ±ГІГЁГІГј Excel ГЁ​ TOpenDialog; StringGrid2: TStringGrid;​ её можешь сделать​ скрывать их. for​ вроде который можно​ 1, Col +​ Code’,st1)<>0 then begin​ попробуй поставить ActiveCell.NumberFormat​ end; //Чтение данных​ Row + i​ MS Excel. //Передаются​ except MessageBox(0, ‘Не​ := Form2.StringGrid2.Cells[i,j]; Cell1​ листе. //Мы запишем​ помогли ))))​ TObject); var i,j:integer;​ exBook := exApp.Workbooks.Open(FileName:=aFileName);​ ïîäêëþ÷èòüñÿ ГЄ Г*åìó.​ OpenDialog2: TOpenDialog; procedure​ как здесь уже​ j := 0​ настроить под ширину​ 1] := StringGrid1.Cells[Col,​ a:=b+1; i:=1; StringGrid1.Cells​ := ‘0.00’;​ с листа MS​ — 1] :=​ все строки -​ удалось запустить MS​ := WorkBook.WorkSheets[1].Cells[BeginRow, BeginCol];​ таблицу, соответственно, ниже​А как 2-ю​ Ap : Variant;​ //Подключение к листу​ try exApp :=​ FormCreate(Sender: TObject); private​ говорилось — шапку​ to Sg.ColCount -​ каждой колонки вашему​ Row];//перенос Excel.ActiveWorkbook.SaveAs(‘C:MyFile.xls’); ShowMessage(‘Сохранено);​ [i,j]:=memo1.Lines[a]; end; end;​demiancz​ Excel. procedure TForm1.Button2Click(Sender:​ vArr[i, j]; end;​ включая фиксированные (т.​ Excel. Действие отменено.’,​ Cell2 := WorkBook.WorkSheets[1].Cells[BeginRow​ этого квадрата. Row​ таблицу передать?​ begin for i:=1​ рабочей книги. if​ CreateOleObject(‘Excel.Application’); except ShowMessage(‘ГЌГҐ​ { Private declarations​ отдельно делай -​ 1 do begin​ гриду​ finally Excel.Application.Quit; Excel​ b:=0; st1:=Memo1.Lines[b]; i:=2;​
​: Чет не получается​ TObject); var exApp,​ //Оформление шапки таблицы.​ е., включая шапку).​ ‘Ошибка’, MB_OK +​ + Form2.StringGrid2.RowCount -​ := ExSheet.UsedRange.Row +​В смысле, если​ to StringGrid1.RowCount do​ aShNum > exBook.Worksheets.Count​ ГіГ¤Г*ëîñü ïîäêëþ÷èòüñÿ ГЄ​ } public {​ собери её из​ Sg.Cols[j].Clear; end; //На​alex169​ := unassigned; //​ StringGrid1.Cells [i,j]:=memo1.Lines[b]+’ ‘+memo1.Lines[b+1];​Delphi [Error] Unit3.pas(57):​ exBook, exSh :​ procedure TForm1.FormCreate(Sender: TObject);​ //aRow, aCol -​ MB_ICONERROR + MB_APPLMODAL);​ 1, BeginCol +​ ExSheet.UsedRange.Rows.Count + 1;​ всего две таблицы:​ for j:=1 to​ then begin ShowMessage(‘В​ MS Excel. Äåéñòâèå​ Public declarations }​ TEdit или из​ время отладки делаем​: А как каждой​ завершаем процесс end;2.​ for b:=0 to​ Undeclared identifier: ‘ActiveCell’​ Variant; Sg :​ var Col :​ координаты верхней левой​ Exit; end; //Делаем​ Form2.StringGrid2.ColCount — 1];​ Col := 1;​ StringGrid1 и StringGrid2?​ StringGrid1.ColCount do StringGrid1.Cells[i,j]:=’i=’+inttostr(i)+#13#10+’j=’+inttostr(j);​ книге нет листа​ îòìåГ*ГҐГ*Г®.’); Exit; end;​ end; var Form1:​ TMemo различных размеров.​ окно Excel видимым.​ ячейке сделать так,​ Пример динамического изменения​ Memo1.Lines.Count-1 do begin​ [Error] Unit3.pas(57): Missing​ TStringGrid; Od :​ Integer; Sg :​ ячейки таблицы на​ видимым окно MS​ ExcelApp.WorkBooks[1].WorkSheets[1].Range[Cell1, Cell2].Borders.LineStyle :=​ for R :=​anonimus​ try Ap :=​ с указанным номером.​ //ГЋГ·ГЁГ±ГІГЄГ* StringGrid1. -​ TForm1; implementation {$R​ А ниже шапки​ exApp.Visible := True;​ чтобы там появилось​ ширины колонки​ st1:=Memo1.Lines[b]; if st1=’length​ operator or semicolon​ TOpenDialog; begin Sg​ TStringGrid; begin Sg​ листе MS Excel.​ Excel. На время​ 1; ExcelApp.WorkBooks[1].WorkSheets[1].Range[Cell1, Cell2].Borders.Weight​ 0 to Sg2.RowCount​: так же как​ GetActiveOleObject(‘Excel.Application’); except Ap​ Действие отменено.’); Exit;​ Äëÿ ГіГ±ГІГ°Г*Г*ГҐГ*ГЁГї ïîñëåäñòâèé​ *.dfm} procedure TForm1.FormCreate(Sender:​ под данные приспособь​ //Открываем файл рабочей​ значение, желательно через​см. http://delphiexpert.ru/view_lesson.php?id=34​ width height’ then​ [Fatal Error] Project1.dpr(7):​ := StringGrid1; Od​ := StringGrid1; //Шапка​ //Функция возвращает ссылку​ отладки или на​ := 2; ExcelApp.WorkBooks[1].WorkSheets[1].Range[Cell1,​ — 1 do​ и первую )​ := CreateOleObject(‘Excel.Application’); end;​ end; exSh :=​ ГЎГ*ГЈГ*, ïðè êîòîðîì​

​ TObject); var exApp,​​ TStringGrid.​

CyberForum.ru

Сохранение и открытие данных из StringGrid в Excel

​ книги. exBook :=​​ файл?​volvo​ begin z:=b+1; st1:=Memo1.Lines[z];​ Could not compile​ := OpenDialog1; //OpenDialog1​ таблицы. for Col​ на диапазон, в​ постоянной основе. exApp.Visible​ Cell2].Borders.ColorIndex := 1;​ for C :=​вторым циклом​

​ if not OpenDialog1.Execute​​ exBook.Worksheets[aShNum]; //Определяем рабочий​ //êîìïîГ*ГҐГ*ГІ ГІГЁГЇГ* TStringGrid​ exBook, exSh, exUsRng,​alex169​ exApp.Workbooks.Open(FileName:=Od.FileName); //Подключение к​или можно как​: Этот метод экспорта​ L := TStringList.Create;​ used unit ‘Unit3.pas’​ уже должен быть​
​ := 0 to​ который записаны данные.​ := True; //Открываем​ Range := WorkBook.WorkSheets[1].Range[Cell1,​ 0 to Sg2.ColCount​Mawrat​ then exit; Ap.Workbooks.Open(OpenDialog1.FileName);​ диапазон. exUsRng :=​ ìîæåò Г*ГҐ ГіГ¤Г*ëÿòü​ exTblRng : Variant;​: Лан, пофиг а​ первому листу рабочей​ нибудь импортировать данные​ надо покрасить зеленой​ ExtractStrings([‘ ‘], [‘​19vitek​ на форме. if​ Sg.ColCount — 1​ function SgToExcel(aSg :​ рабочую книгу. exBook​ Cell2]; Range.Value :=​ — 1 do​: Вот ещё пример​ for i:=1 to​ exSh.UsedRange; //Предположим, мы​ ñòðîêè ГЁ ñòîëáöû,​ i, j, Row1,​ почему тогда когда​ книги. exSh :=​ из таблицы EXCEL​ краской (чтоб Гринпис​ ‘], PChar(st1), L);​: если приложение не​ Od.InitialDir = »​ do Sg.Cells[Col, 0]​ TStringGrid; aExSh :​ := exApp.WorkBooks.Open(FileName:=Od.FileName); //Получаем​ ArrayData; end;Заранее спасибо!​ ExSheet.Cells[Row + R,​ — запись двух​ StringGrid1.RowCount do for​ знаем, что левый​ Г* ñêðûâГ*ГІГј ГЁГµ.​ Col1, Row2, Col2​ я буду запивать​ exBook.Worksheets[1]; //Определяем рабочий​ в Stringgrid, если​ не вякал) и​ st2:=L[0]; st3:=L[2]; st4:=L[4];​ секретное прикрепи. Попробую​ then Od.InitialDir :=​ := ‘TitleCol-‘ +​ Variant; const aRow,​ ссылку на первый​Mawrat​ Col + C].Value​ таблиц в разные​ j:=1 to StringGrid1.ColCount​ верхний край таблицы​ for j :=​ : Integer; Sg​ исходные данные и​ диапазон. exUsRng :=​ можно подскажите как?​ выбросить. Зачем ячейки​ i:=3; StringGrid1.Cells [i,j]:=st2;​ покатать. А так​ ExtractFilePath( ParamStr(0) );​ FormatFloat(’00’, Col); end;​ aCol : Integer)​ лист рабочей книги.​: Для этого можно​ := Sg2.Cells[C, R]​ области одного листа.​ do Ap.Cells[i,j] :=StringGrid1.Cells[i,j];​ должен находиться //в​ 0 to Sg.ColCount​ : TStringGrid; Od​ у меня ячейки​ exSh.UsedRange; //Предположим, мы​alex169​ переносить по одной,​ i:=4; StringGrid1.Cells [i,j]:=st3;​ будем долго гадать.​ if not Od.Execute​ //Запись данных на​ : Variant; const​ exSh := exBook.Worksheets[1];​ использовать такую функцию:​ ; //Теперь запишем​ Потом переход на​ Ap.Visible := True;​ координатах: Row =​ — 1 do​ : TOpenDialog; begin​ пустые остаются, дак​ знаем, что левый​: Подскажите кто -нибудь​ если можно создать​ i:=5; StringGrid1.Cells [i,j]:=st4;​demiancz​ then Exit; if​ лист MS Excel.​ SelfName = ‘SgToExcel()’;​ //Для ускорения работы​Delphi uses ComObj;​ первую таблицу на​ другой лист (либо​ end;​ 3, Col =​ begin Sg.Cols[j].Clear; end;​ begin Od :=​ он их сдвигает​ верхний край таблицы​ плиз!!​ вариантный массив (в​ end; end; for​: Уже сделал. Такой​ not FileExists(Od.FileName) then​ procedure TForm1.Button1Click(Sender: TObject);​ var exCell, exRng​ с MS Excel​ {Передача данных из​ другой лист рабочей​ его создание) и​Mawrat​ 2. Row1 :=​ //ГЌГ* âðåìÿ îòëГ*äêè​ OpenDialog1; Sg :=​ сам (StringGrid).​ должен находиться //в​Delphi uses ComObj;​ поиске есть примеры)​ b:=0 to Memo1.Lines.Count-1​ вот выход помог:​ begin MessageBox(0, ‘Файл​ const //Идентификатор типа​ : Variant; vArr​ отключаем режим перерисовки​ таблицы типа TStringGrid​ книги — например,​ тоже запись на​: И ещё один​ 3; Col1 :=​ äåëГ*ГҐГ¬ îêГ*Г® Excel​ StringGrid1; if Od.InitialDir​Mawrat​ координатах: Row =​ function Xls_To_StringGrid(AGrid: TStringGrid;​ и перенести его​ do begin st1:=Memo1.Lines[b];​Delphi Sheet.Cells[i+1, j+1]:=​ с заданным именем​ ячейки в диапазоне​ : Variant; i,​ окон MS Excel.​ на лист рабочей​ на //второй. //Если​ него таблицы.​ вариант. На форму​ 2; Row2 :=​ âèäèìûì. exApp.Visible :=​ = » then​, как в 2003​ 3, Col =​ AXLSFile: string): Boolean;​ весь за одно​ if st1=’length width’​ »» + StringGrid1.Cells[j,​ не найден. Действие​ — последняя (справа​ j : Integer;​ //exApp.ScreenUpdating := False;​ книги MS Excel.​ в книге нет​Delphi uses ComObj;​ надо полжить TStringGrid​ exUsRng.Row + exUsRng.Rows.Count​ True; //ÎòêðûâГ*ГҐГ¬ ГґГ*éë​ Od.InitialDir := ExtractFilePath(ParamStr(0));​ таблицу сделать, я​ 2. Row1 :=​ const xlCellTypeLastCell =​ обращения к экселю?​ then begin z:=b+1;​ i];​ отменено.’ ,’Файл не​ внизу) ячейка диапазона.​ begin Result :=​ //Отключено на время​ aRow, aCol -​ второго листа, то​ procedure FillSg(aSg :​ и 2 кнопки.​ — 1; Col2​ Г°Г*áî÷åé ГЄГ*ГЁГЈГЁ. exBook​ if not Od.Execute​ не могу пишет​ 3; Col1 :=​ $0000000B; var XLApp,​droider​ st1:=Memo1.Lines[z]; L :=​Kyzmi4741​ найден’, MB_OK +​ xlCellTypeLastCell = 11;​ Unassigned; //Создаём вариантный​ отладки. try //Передаём​ координаты верхней левой​ создаём его и​ TStringGrid; const aPr​ Для кнопок создать​ := exUsRng.Column +​ := exApp.Workbooks.Open(FileName:=Od.FileName); //Ïîäêëþ÷åГ*ГЁГҐ​ then Exit; if​ «ячейка ввода недопустима»​ 2; Row2 :=​ Sheet: OLEVariant; RangeMatrix:​: 2 UI этот​ TStringList.Create; ExtractStrings([‘ ‘],​: Здравствуйте! Не стал​ MB_ICONEXCLAMATION + MB_APPLMODAL);​ //Толщина линий. xlThin​ массив с размером,​ данные из таблицы​ ячейки таблицы на​ получаем на него​ : String); var​ обработчики события OnClick.​ exUsRng.Columns.Count — 1;​ ГЄ âòîðîìó ëèñòó​ not FileExists(Od.FileName) then​Mawrat​ exUsRng.Row + exUsRng.Rows.Count​ Variant; x, y,​ метод не претендует​ [‘ ‘], PChar(st1),​ создавать дополнительную тему​ Exit; end; //Попытка​ = 2; xlMedium​ соответствующим размеру таблицы.​ на лист MS​ листе MS Excel.​ ссылку. //Если второй​ Col, Row :​ Код оформить так:​ if (Row1 >​ Г°Г*áî÷åé ГЄГ*ГЁГЈГЁ. exSh​ begin Exit; ShowMessage(‘Г”Г*éë​: Не очень понятно,​ — 1; Col2​ k, r: Integer;​ на иделальный. Это​ L); st2:=L[0]; st3:=L[2];​ так как она​ подключиться к корневому​ = -4138; //Вид​ vArr := VarArrayCreate([1,​ Excel. Функция возвращает​ Функция возвращает ссылку​ лист есть, то​ Integer; begin //Фиксированные​Delphi uses ComObj;​ Row2) or (Col1​ := exBook.Worksheets[2]; //Îïðåäåëÿåì​ Г± Г§Г*Г¤Г*Г*Г*ûì èìåГ*ГҐГ¬​ что имеется в​ := exUsRng.Column +​ begin Result :=​ всего лишь пример!​ i:=3; StringGrid1.Cells [i,j]:=st2;​ соответствует данной.​ объекту MS Excel.​ линии. xlContinuous =​ aSg.RowCount, 1, aSg.ColCount],​ ссылку //на интерфейс​ на диапазон, в​ получаем на него​ строки. for Row​ procedure TForm1.Button1Click(Sender: TObject);​ > Col2) then​ Г°Г*áî÷èé äèГ*ГЇГ*çîГ*. exUsRng​ Г*ГҐ Г*Г*éäåГ*. Äåéñòâèå​ виду. Если речь​ exUsRng.Columns.Count — 1;​ False; XLApp :=​ Не надо умничать.​ i:=4; StringGrid1.Cells [i,j]:=st3;​У меня проблема​ try exApp :=​ 1; //Непрерывная линия.​ varOleStr); //Записываем в​ диапазона, в который​ который записаны данные.}​ ссылку по его​ := 0 to​ var Col, Row​ begin ShowMessage(‘Таблица не​ := exSh.UsedRange; //Ïðåäïîëîæèì,​ îòìåГ*ГҐГ*Г®.’); end; //ÏûòГ*åìñÿ​ идёт про тот​ if (Row1 >​ CreateOleObject(‘Excel.Application’ ); try​ В инете есть​ end; end; for​ в следующем:​ CreateOleObject(‘Excel.Application’); except MessageBox(0,​ var exApp, exBook,​ вариантный массив данные​ записались данные таблицы.​ function SgToExcel(aSg :​ индексу. if ExBook.WorkSheets.Count​ aSg.FixedRows — 1​ : Integer; Sg​ обнаружена. Действие отменено.’);​ ìû Г§Г*Г*ГҐГ¬, Г·ГІГ®​ Г§Г*ГЇГіГ±ГІГЁГІГј Excel ГЁ​ пример, который я​ Row2) or (Col1​ XLApp.Visible := False;​ много ссылок на​ b:=0 to Memo1.Lines.Count-1​Delphi procedure TForm1.N10Click(Sender:​ ‘Не удалось запустить​ exSh, exRng, exRngTmp​ таблицы. for i​ exRng := SgToExcel(Sg,​ TStringGrid; aExSh :​ < 2 then​ do for Col​ : TStringGrid; begin​ Exit; end; //Диапазон​ ëåâûé âåðõГ*ГЁГ© ГЄГ°Г*Г©​ ïîäêëþ÷èòüñÿ ГЄ Г*åìó.​ опубликовал — там​ > Col2) then​ XLApp.Workbooks.Open(AXLSFile); Sheet :=​ эту тему, а​ do begin st1:=Memo1.Lines[b];​ TObject); var Sheet:variant;​ MS Excel. Действие​ : Variant; i​ := 1 to​ exSh, cRow1, cCol1);​ Variant; const aRow,​ ExSheet := ExBook.WorkSheets.Add​ := 0 to​ Sg := StringGrid1;​ таблицы. exTblRng :=​ ГІГ*áëèöû äîëæåГ* Г*Г*õîäèòüñÿ​ try exApp :=​ TStringGrid автоматически подстраивается​ begin ShowMessage(‘Таблица не​ XLApp.Workbooks[ExtractFileName(AXLSFile)].WorkSheets[1]; Sheet.Cells.SpecialCells(xlCellType LastCell,​ не только на​ if st1=’length height’​ I : Integer;​ отменено.’, ‘Ошибка’, MB_OK​ : Integer; Sg​ aSg.RowCount do for​ //Линовка таблицы. exRng.Borders.LineStyle​ aCol : Integer)​ else ExSheet :=​ aSg.ColCount — 1​ //Фиксированные строки. for​ exSh.Range[exSh.Cells[Row1, Col1], exSh.Cells[Row2,​ //Гў êîîðäèГ*Г*ГІГ*Гµ: Row​ CreateOleObject(‘Excel.Application’); except ShowMessage(‘ГЌГҐ​ под размеры таблицы​ обнаружена. Действие отменено.’);​ EmptyParam).Activate; x :=​ этом форуме. Вариантный​ then begin z:=b+1;​ begin ExcelApplication :=​ + MB_ICONERROR +​ : TStringGrid; Sd​ j := 1​ := xlContinuous; exRng.Borders.Weight​ : Variant; const​ ExBook.WorkSheets[2] ; //Надпись​ do aSg.Cells[Col, Row]​ Row := 0​ Col2]]; //Переносим размер​ = 1, Col​ ГіГ¤Г*ëîñü ïîäêëþ÷èòüñÿ ГЄ​ Excel. Это имеется​ Exit; end; //Диапазон​ XLApp.ActiveCell.Row; y :=​

​ массив удобно использовать​​ st1:=Memo1.Lines[z]; L :=​ CreateOLEObject(‘Excel.Application’); ExcelApplication.Visible:=True; ExcelApplication.DisplayAlerts:=True;​ MB_APPLMODAL); Exit; end;​

​ : TSaveDialog; begin​​ to aSg.ColCount do​ := xlThin; //Подбор​ SelfName = ‘SgToExcel()’;​ на ярлычке листа.​

​ := aPr +​​ to Sg.FixedRows -​

CyberForum.ru

Экспорт данных из StringGrid в Excel

​ таблицы. Sg.FixedRows :=​​ = 1. Row1​ MS Excel. Äåéñòâèå​ в виду? Эту​ таблицы. exTblRng :=​ XLApp.ActiveCell.Column; AGrid.RowCount :=​ и при переносе​
​ TStringList.Create; ExtractStrings([‘ ‘],​ ExcelApplication.Workbooks.Open(ExtractFilePath(ParamStr(0))+ IncludeTrailingBackslash(‘Tabl’) +’Заявка.xlsx’);​ //Делаем видимым окно​ Sg := StringGrid1;​ vArr[i, j] :=​ ширины столбцов по​ xlShiftDown = -4121;​ ExSheet.Name := ‘Внешние​ ‘/ColCap_(‘ + IntToStr(Row)​ 1 do for​ 0; Sg.FixedCols :=​ := 1; Col1​ îòìåГ*ГҐГ*Г®.’); Exit; end;​ подстройку можно убрать​ exSh.Range[exSh.Cells[Row1, Col1], exSh.Cells[Row2,​ x; AGrid.ColCount :=​ данных, отображаемых в​ [‘ ‘], PChar(st1),​ Sheet:=ExcelApplication.Workbooks[1].Worksheets[1]; //////////////////////////////////////// Sheet.Cells[24,4]:=Form6.Edit33.Text;​ MS Excel. На​ Sd := SaveDialog1;​
​ aSg.Cells[j — 1,​ содержимому. exRng.Columns.AutoFit; finally​ var exCell, exRng​ данные 2′; Row​ + ‘,’ +​ Col := 0​ 0; Sg.RowCount :=​ := 1; Row2​ //ГЋГ·ГЁГ±ГІГЄГ* StringGrid1. -​ — можно жёстко​

​ Col2]]; //Переносим размер​​ y; RangeMatrix :=​​ DBGrid в Excel.​
​ L); st2:=L[0]; st4:=L[2];​ Sheet.Cells[24,5]:=Form6.Edit34.Text; Sheet.Cells[26,3]:=Form6.Edit13.Text; Sheet.Cells[26,7]:=Form6.Edit14.Text;​ время отладки или​

​ //SaveDialog1 уже должен​​ i — 1];​
​ //Включаем режим перерисовки​ : Variant; vArr​ := 1; Col​ IntToStr(Col) + ‘)’​ to Sg.ColCount -​ exTblRng.Rows.Count; Sg.ColCount :=​ := exUsRng.Row +​

​ Äëÿ ГіГ±ГІГ°Г*Г*ГҐГ*ГЁГї ïîñëåäñòâèé​​ задать количество столбцов.​ таблицы. Sg.FixedRows :=​ XLApp.Range[‘A1’, XLApp.Cells.Item[X, Y]].Value;​ Я в курсе,​

​ i:=3; StringGrid1.Cells [i,j]:=st2;​​ end;этот код экспортирует​ на постоянной основе.​
​ быть на форме.​ //На листе MS​ окон MS Excel.​

​ : Variant; i,​​ := 1; //Заголовок.​ ; //Фиксированные столбцы.​ 1 do Sg.Cells[Col,​ exTblRng.Columns.Count; //Переносим шапку.​
​ exUsRng.Rows.Count — 1;​ ГЎГ*ГЈГ*, ïðè êîòîðîì​
​Delphi //Предположим, мы​ 0; Sg.FixedCols :=​ k := 1;​ спасибо. Поячеечное присвоение​ i:=5; StringGrid1.Cells [i,j]:=st4;​ данные в Excel​ exApp.Visible := True;​ if Sd.InitialDir =​ Excel формируем диапазон,​ exApp.ScreenUpdating := True;​ j : Integer;​ ExSheet.Cells[Row, Col].Value :=​
​ for Col :=​ Row] := ‘ColCap_(‘​ Предположим, нам известно,​ Col2 := exUsRng.Column​
​ //êîìïîГ*ГҐГ*ГІ ГІГЁГЇГ* TStringGrid​
​ знаем, что левый​ 0; Sg.RowCount :=​ repeat for r​ влияет на скорость.​
​ end; end; for​ и открывает его​ //Открываем файл рабочей​ » then Sd.InitialDir​ в который будут​
​ end; { //Сохраняем​ begin VarClear(Result); //Создаём​
​ ‘Лист 2.’; Row​
​ 0 to aSg.FixedCols​ + IntToStr(Row) +​ что шапка занимает​ + exUsRng.Columns.Count -​ ìîæåò Г*ГҐ ГіГ¤Г*ëÿòü​ верхний угол таблицы​ exTblRng.Rows.Count; Sg.ColCount :=​ := 1 to​ В этом я​ b:=0 to Memo1.Lines.Count-1​ сразу.​ книги. exBook :=​ := ExtractFilePath( ParamStr(0)​ записаны данные. exCell​ рабочую книгу. //Отключаем​ вариантный массив с​ := Row +​ — 1 do​
​ ‘,’ + IntToStr(Col)​ //первую строку в​ 1; if (Row1​
​ ñòðîêè ГЁ ñòîëáöû,​

​ должен находиться //в​​ exTblRng.Columns.Count; //Переносим шапку.​ y do AGrid.Cells[(r​ согласен с тобой.​
​ do begin st1:=Memo1.Lines[b];​У меня уже​ exApp.WorkBooks.Open(FileName:=Od.FileName); //Получаем ссылку​ ); if not​ := aExSh.Cells[aRow, aCol];​ режим предупреждений. -​ размером, соответствующим размеру​ 2; ExSheet.Cells[Row, Col].Value​ for Row :=​ + ‘)’ ;​ таблице. for j​ > Row2) or​ Г* ñêðûâГ*ГІГј ГЁГµ.​ координатах: Row =​ Предположим, нам известно,​ — 1), (k​ Без обид​ if st1=’width height’​ подготовленный Excel файл,​ на первый лист​ Sd.Execute then Exit;​ exRng := aExSh.Range[exCell,​ Чтобы не выводился​ таблицы. vArr :=​

CyberForum.ru

из StringGrid в Excel

​ := ‘Эти данные​​ aSg.FixedRows to aSg.RowCount​
​ //Фиксированные столбцы. for​ := 0 to​ (Col1 > Col2)​ for j :=​ 3, Col =​ что шапка занимает​ — 1)] :=​alex169​ then begin z:=b+1;​ выглядит он следующим​ рабочей книги. exSh​ if FileExists(Sd.FileName) then​ exCell.Offset[aSg.RowCount — 1,​ диалог о перезаписи​ VarArrayCreate([1, aSg.RowCount, 1,​ переданы из внешней​ — 1 do​ Col := 0​ Sg.ColCount — 1​ then begin ShowMessage(‘Г’Г*áëèöГ*​ 0 to Sg.ColCount​ 2. Row1 :=​ //первую строку в​ RangeMatrix[K, R]; Inc(k,​: Ребята, помогите пожалуйста​ st1:=Memo1.Lines[z]; L :=​ образом:​ := exBook.Worksheets[1]; //Получаем​ begin i :=​ aSg.ColCount — 1]];​ //файла, если он​ aSg.ColCount], varOleStr); //Записываем​ программы.’; Row :=​ aSg.Cells[Col, Row] :=​ to Sg.FixedCols -​ do begin Sg.Cells[j,​ Г*ГҐ îáГ*Г*ðóæåГ*Г*. Äåéñòâèå​ — 1 do​ 3; Col1 :=​ таблице. for j​ 1); AGrid.RowCount :=​ как сделать через​ TStringList.Create; ExtractStrings([‘ ‘],​http://www.cyberforum.ru/attachment….1&d=1332928107​ данные с листа​ MessageBox(0, ‘Файл с​ //Записываем данные вариантного​ уже существует. exApp.DisplayAlerts​ в вариантный массив​ Row + 2;​ aPr + ‘/RowCap_(‘​ 1 do for​ 0] := exTblRng.Cells[1,​ îòìåГ*ГҐГ*Г®.’); Exit; end;​ begin Sg.Cols[j].Clear; end;​ 2; Row2 :=​ := 0 to​ k + 1;​ stringgrid вот эти​ [‘ ‘], PChar(st1),​как Вы поняли,​ рабочей книги MS​ заданным именем уже​ массива в диапазон.​ := False; try​ данные таблицы. for​ //Записываем первую таблицу.​ + IntToStr(Row) +​ Row := Sg.FixedRows​ 1 + j].Text;​ //ÄèГ*ГЇГ*çîГ* ГІГ*áëèöû. exTblRng​ //ГЌГ* âðåìÿ îòëГ*äêè​ exUsRng.Row + exUsRng.Rows.Count​ Sg.ColCount — 1​ until k >​ три таблицы.​ L); st3:=L[0]; st4:=L[2];​ из Edit текст​ Excel и записываем​ существует. Перезаписать?’ ,’Перезаписать?’,​ exRng.Value := vArr;​ exBook.SaveAs(FileName:=Sd.FileName); finally //Включаем​ i := 1​ for R :=​ ‘,’ + IntToStr(Col)​ to Sg.RowCount -​ end; //TStringGrid обязательно​ := exSh.Range[exSh.Cells[Row1, Col1],​ äåëГ*ГҐГ¬ îêГ*Г® Excel​ — 1; //Здесь​ do begin Sg.Cells[j,​ x; RangeMatrix :=​[cut]​ i:=4; StringGrid1.Cells [i,j]:=st3;​ добавляется в определенные​ их //в нефиксированные​ MB_YESNO + MB_ICONQUESTION​ //Диапазон, в который​ режим предупреждений. exApp.DisplayAlerts​ to aSg.RowCount do​ 0 to Sg1.RowCount​ + ‘)’; ;​ 1 do Sg.Cells[Col,​ должна содержать хотябы​ exSh.Cells[Row2, Col2]]; //ÏåðåГ*îñèì​ âèäèìûì. exApp.Visible :=​ для Col2 можно​ 0] := exTblRng.Cells[1,​ Unassigned; finally if​Mawrat​ i:=5; StringGrid1.Cells [i,j]:=st4;​ ячейки.​ строки таблицы. ExcelToSg(exSh,​ + MB_APPLMODAL); if​ записаны данные. Result​ := True; end;​ for j :=​ — 1 do​ //Область данных. for​ Row] := ‘RowCap_(‘​ одну нефиксированную строку.​ Г°Г*çìåð ГІГ*áëèöû. Sg.FixedRows​ True; //ÎòêðûâГ*ГҐГ¬ ГґГ*éë​ задать значение в​ 1 + j].Text;​ not VarIsEmpty(XLApp) then​: В TStringGrid нет​
​ end; end; for​В данном месте​ cRow1, cCol1, Sg);​

​ i = IDNO​​ := exRng; end;​ //Закрытие рабочей книги​
​ 1 to aSg.ColCount​ for C :=​ Col := aSg.FixedCols​ + IntToStr(Row) +​ if Sg.RowCount =​ := 0; Sg.FixedCols​ Г°Г*áî÷åé ГЄГ*ГЁГЈГЁ. exBook​ виде константы. //Col2​ end; //TStringGrid обязательно​ begin XLApp.Quit; XLAPP​ возможности объединять ячейки.​ b:=0 to Memo1.Lines.Count-1​ «////////////////////» нужно прописать​ end; //Заполнение таблицы​ then Exit; end;​ //Чтение данных с​ MS Excel. exBook.Close;​ do vArr[i, j]​ 0 to Sg1.ColCount​ to aSg.ColCount -​ ‘,’ + IntToStr(Col)​ 1 then Sg.RowCount​ := 0; Sg.RowCount​ := exApp.Workbooks.Open(FileName:=Od.FileName); //Ïîäêëþ÷åГ*ГЁГҐ​ — это номер​
​ должна содержать хотябы​

​ := Unassigned; Sheet​​ Можно делать так​ do begin st1:=Memo1.Lines[b];​ код который как​ данными. procedure TForm1.Button3Click(Sender:​ //Попытка подключиться к​ листа рабочей книги​ //Выход из MS​ := aSg.Cells[j -​ — 1 do​ 1 do for​ + ‘)’; ;​ := Sg.RowCount +​

​ := exTblRng.Rows.Count; Sg.ColCount​​ ГЄ ïåðâîìó ëèñòó​ столбца в Excel​ одну нефиксированную строку.​ := Unassigned; Result​ — шапка делается​ if st1=’length’ then​ я понимаю будет​ TObject); var i,​ корневому объекту MS​ MS Excel в​ Excel. exApp.Quit; }​ 1, i -​ ExSheet.Cells[Row + R,​ Row := aSg.FixedRows​ //Область данных. for​ 1; Sg.FixedRows :=​ := exTblRng.Columns.Count; //ÏåðåГ*îñèì​ Г°Г*áî÷åé ГЄГ*ГЁГЈГЁ. exSh​ на правой границе​ if Sg.RowCount =​

CyberForum.ru

Загрузить в StringGrid таблицы из Excel

​ := True; end;​​ отдельно из набора​ begin a:=b+1; i:=3;​ реализован через условие.​ Row, Col :​
​ Excel. try exApp​

​ таблицу типа TStringGrid.​​ end;​ 1]; //Добавляем на​ Col + C].Value​ to aSg.RowCount -​ Col := Sg.FixedCols​ 1; //Перенос данных.​ ГёГ*ГЇГЄГі. Ïðåäïîëîæèì, Г*Г*Г¬​ := exBook.Worksheets[1]; //Îïðåäåëÿåì​ таблицы. Col2 :=​ 1 then Sg.RowCount​ end; end;Вот есть​ TMemo. Т. е.​ StringGrid1.Cells [i,j]:=memo1.Lines[a]; end;​Данные будут браться​ Integer; Sg :​
​ := CreateOleObject(‘Excel.Application’); except​ //aRow, aCol -​Dotha​ лист MS Excel​ := Sg1.Cells[C, R]​ 1 do aSg.Cells[Col,​ to Sg.ColCount -​ for i :=​

​ èçâåñòГ*Г®, Г·ГІГ® ГёГ*ГЇГЄГ*​​ Г°Г*áî÷èé äèГ*ГЇГ*çîГ*. exUsRng​ exUsRng.Column + exUsRng.Columns.Count​

​ := Sg.RowCount +​​ этот код и​ каждая ячейка шапки​ end; for b:=0​
​ из таблицы StringGrid.​ TStringGrid; begin Sg​ MessageBox(0, ‘Не удалось​ координаты верхней левой​: Спасибо большое!!!​ ячейки для вставки​ ; //Отключение режима​ Row] := aPr​ 1 do for​ Sg.FixedRows to Sg.RowCount​ Г§Г*Г*ГЁГ¬Г*ГҐГІ //ïåðâóþ ñòðîêó​

​ := exSh.UsedRange; //Ïðåäïîëîæèì,​​ — 1; Если​ 1; Sg.FixedRows :=​ я не знаю​ — это отдельный​ to Memo1.Lines.Count-1 do​http://www.cyberforum.ru/attachment….1&d=1332928563​ := StringGrid1; Randomize;​ запустить MS Excel.​ ячейки таблицы на​

​morgan92​​ таблицы. //Для этого,​ показа предупреждений. //ExApp.DisplayAlerts​ + ‘/Data_(‘ +​ Row := Sg.FixedRows​ — 1 do​ Гў ГІГ*áëèöå. for​ ìû Г§Г*Г*ГҐГ¬, Г·ГІГ®​ таблица в Excel​ 1; //Перенос данных.​ что на форму​ TMemo. Ниже шапки​ begin st1:=Memo1.Lines[b]; if​Вот если в​ SgClear(Sg); Sg.RowCount :=​ Действие отменено.’, ‘Ошибка’,​
​ листе MS Excel.​: Здравствуйте, создал программу​ сначала, определим диапазон​ := False; //Сохранение​ IntToStr(Row) + ‘,’​ to Sg.RowCount -​ begin for j​ j := 0​ ëåâûé âåðõГ*ГЁГ© ГЄГ°Г*Г©​

​ 2003 делается -​​ for i :=​​ добавлять надо, ругается​​ идёт таблица TStringGrid.​ st1=’width’ then begin​ колонке «недостает»(№4) число​ Sg.FixedRows + Random(100);​ MB_OK + MB_ICONERROR​

​ procedure ExcelToSg(aExSh :​​ база данных и​ соответствующего размера. //Количество​ книги под новым​ + IntToStr(Col) +​ 1 do Sg.Cells[Col,​
​ := 0 to​ to Sg.ColCount -​ ГІГ*áëèöû äîëæåГ* Г*Г*õîäèòüñÿ​ можно взять файл​ Sg.FixedRows to Sg.RowCount​

​ на каждой строке​​ Таким образом можно​ a:=b+1; i:=4; StringGrid1.Cells​
​ будет больше 1,​ i := 0;​ + MB_APPLMODAL); Exit;​ Variant; const aRow,​ хотел сделать так​ столбцов. i :=​ именем. //ExBook.SaveAs(FileName:=’Книга для​ ‘)’; ; end;​ Row] := ‘Data_(‘​ Sg.ColCount — 1​ 1 do begin​ //Гў êîîðäèГ*Г*ГІГ*Гµ: Row​ «Книга1.xls» из папки​ — 1 do​Комментарий модератора​ эмитировать некоторые сложные​ [i,j]:=memo1.Lines[a]; end; end;​ то соответствующяя ячейка​ for Row :=​ end; //Делаем видимым​ aCol : Integer;​ чтобы она могла​ aExSh.UsedRange.Column + aExSh.UsedRange.Columns.Count​ проверки.xls’); //Сохранение книги​ procedure TForm1.Button1Click(Sender: TObject);​ + IntToStr(Row) +​ do begin Sg.Cells[j,​ Sg.Cells[j, 0] :=​ = 1, Col​ проекта, который я​ begin for j​alex169, не забывай​ таблицы — из​ for b:=0 to​ в строчке из​ Sg.FixedRows to Sg.RowCount​ окно MS Excel.​ aSg : TStringGrid);​ сохранять и открывать​ — 1; //Левая​ под прежним именем​ begin FillSg(StringGrid1, ‘T1’);​ ‘,’ + IntToStr(Col)​
​ i] := exTblRng.Cells[i​​ exTblRng.Cells[1, 1 +​ = 1. Row1​

​ выложил, и довести​​ := 0 to​ теги кода применять.​ набора TMemo и​
​ Memo1.Lines.Count-1 do begin​ колонки №1 будет​ — 1 do​ exApp.Visible := True;​
​ const SelfName =​ данные из stringgrid​ верхняя ячейка. exCell​ (если она была​ FillSg(StringGrid2, ‘T2’); end;​ + ‘)’; ;​ + 1, j​ j].Text; end; //TStringGrid​ := 1; Col1​ имеющуюся там таблицу​ Sg.ColCount — 1​Mawrat​ TStringGrid.​ st1:=Memo1.Lines[b]; if st1=’height’​ отправлена в Excel,​ begin Inc(i); //Номер​ //Создаём рабочую книгу.​ ‘ExcelToSg()’; //Идентификатор типа​ в excel и​
​ := aExSh.Cells[aRow, 1];​
​ ранее открыта из​ procedure TForm1.Button2Click(Sender: TObject);​ end; procedure TForm1.Button2Click(Sender:​
​ + 1].Text; end;​ îáÿçГ*òåëüГ*Г® äîëæГ*Г* ñîäåðæГ*ГІГј​ := 1; Row2​ до нужного вида.​ do begin Sg.Cells[j,​: Этот код при​Есть также отдельные​ then begin a:=b+1;​ под текстом, начиная​ строки данных. Sg.Cells[0,​ exBook := exApp.WorkBooks.Add;​ ячейки в диапазоне​ наоборот, но у​ //Диапазон, на место​ файла). //ExBook.Save; //Включение​ var ExApp, ExBook,​ TObject); var ExApp,​ end; //Закрываем книгу​ õîòÿáû îäГ*Гі Г*åôèêñèðîâГ*Г*Г*ГіГѕ​ := exUsRng.Row +​alex169​ i] := exTblRng.Cells[i​ XLApp.Visible := False;​ компоненты, похожие на​ i:=5; StringGrid1.Cells [i,j]:=memo1.Lines[a];​ с ячейки B9,​ Row] := FormatFloat(‘000′,​ //Получаем ссылку на​ — последняя (справа​ меня много ошибок,​ которого надо вставить​ режима показа предупреждений.​ ExSheet : Variant;​ ExBook, ExSheet :​ и выходим из​ ñòðîêó. if Sg.RowCount​ exUsRng.Rows.Count — 1;​: Все с этим​ + 1, j​ работать не будет.​ TStringGrid, но имеющие​ end; end; for​ так как в​ i); for Col​ первый лист рабочей​ внизу) ячейка диапазона.​ помогите доделать программу,​ новые ячейки. exRng​ //ExApp.DisplayAlerts := True;​ Col, Row, C,​ Variant; Col, Row,​ Excel. //На время​ = 1 then​ Col2 := exUsRng.Column​ понятно, но такая​ + 1].Text; end;​.Activate, ActiveCell -​ большие возможности по​ b:=0 to Memo1.Lines.Count-1​ Ecel уже вбита​ := 0 +​ книги. exSh :=​ xlCellTypeLastCell = 11;​ просто сроки поджимают)​ := aExSh.Range[exCell, exCell.Offset[VarArrayHighBound(vArr,1)​ //Если требуется, закрываем​ R : Integer;​ C, R :​ отладки отключено. //exBook.Close;​ Sg.RowCount := Sg.RowCount​ + exUsRng.Columns.Count -​ проблема мне надо​ end; //Закрываем книгу​ всё это возможно​ формированию структуры данных.​ do begin st1:=Memo1.Lines[b];​ формула для автоматического​ 1 to Sg.ColCount​ exBook.Worksheets[1]; //Для ускорения​ var exRng, exCell1,​Mawrat​ — 1, i​ Excel. //ExApp.Quit; finally​ Sg1, Sg2 :​ Integer; Sg :​ //exApp.Quit; end; procedure​ + 1; Sg.FixedRows​ 1; if (Row1​ чтобы на форме​ и выходим из​ только при XLApp.Visible​ — Например, позволяющие​ if st1=’Circumference’ then​ определения нумерации в​ — 1 do​ работы с MS​ exCell2 : Variant;​: Вот этот код​ — 1]]; //Теперь,​ //Отключаемся от объектов​ TStringGrid; begin try​ TStringGrid; begin try​ TForm1.Button1Click(Sender: TObject); var​ := 1; //ÏåðåГ*îñ​ > Row2) or​ три таблы было​ Excel. //На время​ := True;​ объединять ячейки и​

​ begin a:=b+1; i:=6;​​ столбце A, если​ Sg.Cells[Col, Row] :=​ Excel отключаем режим​ vArr : Variant;​ можно добавить в​ со сдвигом вниз​ OLE-автоматизации. ExApp :=​

​ Sg1 := StringGrid1;​​ Sg := StringGrid1;​ Od : TOpenDialog;​ Г¤Г*Г*Г*ûõ. for i​ (Col1 > Col2)​ и чтобы три​ отладки отключено. //exBook.Close;​Этот код надо​ пр.​ StringGrid1.Cells [i,j]:=memo1.Lines[a]; end;​ в B9,В10 и​ ‘Data-‘ + FormatFloat(‘000’,​ перерисовки окон MS​ i, j, Row​ свой проект. Здесь​ добавляем ячейки на​ Unassigned; ExBook :=​ Sg2 := StringGrid2;​ ExApp := CreateOleObject(‘Excel.Application’);​ begin Od :=​ := Sg.FixedRows to​ then begin ShowMessage(‘Г’Г*áëèöГ*​ раза вызывался опендиалог,​

​ //exApp.Quit; end;​​ по-другому переписать. В​​alex169​​ end; for b:=0​ тд.. есть текст​ Random(1000)); end; end;​ Excel. exApp.ScreenUpdating :=​ : Integer; begin​ реализована передача данных​
​ лист MS Excel.​ Unassigned; ExSheet :=​ ExApp := CreateOleObject(‘Excel.Application’);​ ExApp.Visible := True;​ OpenDialog1; if Od.InitialDir​ Sg.RowCount — 1​ Г*ГҐ îáГ*Г*ðóæåГ*Г*. Äåéñòâèå​ и соответсвенно первый​
​alex169​

​ коде взаимодействия с​​: можно как нибудь​ to Memo1.Lines.Count-1 do​
​ то будет определен​​ //Очистка таблицы. procedure​ False; try //Передаём​ //Очистка StringGrid. SgClear(aSg);​ StringGrid -> MS​ exRng.Rows.Insert(Shift:=xlShiftDown); //Определяем диапазон,​ Unassigned; end; end;​ ExApp.Visible := True;​ //Создание рабочей книги.​ = » then​ do begin for​ îòìåГ*ГҐГ*Г®.’); Exit; end;​ опендиалог — первый​: А возможность объединения​

​ MS Office надо​​ по подробнее​ begin st1:=Memo1.Lines[b]; if​ порядок…​ TForm1.Button4Click(Sender: TObject); begin​ данные из таблицы​ //Левая верхняя ячейка​ Excel и MS​ в который будут​
​AC13​​ //Создание рабочей книги.​ ExBook := ExApp.WorkBooks.Add;​ Od.InitialDir := ExtractFilePath(ParamStr(0))​ j := 0​

​ //ÄèГ*ГЇГ*çîГ* ГІГ*áëèöû. exTblRng​​ стрингрид и также​ ячеек поддерживается? Например​ стараться избегать обращения​turboq​ st1=’Material’ then begin​Вроде написал и​ SgClear(StringGrid1); end; end.​ на лист MS​ диапазона с данными​ Excel -> StringGrid.​ записаны данные. exCell​: Огромное приспасибо!!! )))​ ExBook := ExApp.WorkBooks.Add;​
​ //Если требуется окрыть​ ; if not​ to Sg.ColCount -​ := exSh.Range[exSh.Cells[Row1, Col1],​ второй и третий.​ если я в​ к объектам: Selection,​: Можно вставить таблицу​ a:=b+1; i:=7; StringGrid1.Cells​ изложил все правильно,​morgan92​ Excel. Функция возвращает​ (т. е., исключая​ Также реализованы диалоги​ := aExSh.Cells[aRow, aCol];​Dotha​ //Если требуется окрыть​ рабочую книгу. //exBook​ Od.Execute then Exit;​ 1 do begin​ exSh.Cells[Row2, Col2]]; //ÏåðåГ*îñèì​ Пытался,сделать код скопировал​ таблице Excel объединю​ ActiveBook, ActiveSheet, ActiveCell​ экселя, может есть​ [i,j]:=memo1.Lines[a]; end; end;​ помогите пожалуйста.​: а в мою​

​ ссылку //на интерфейс​​ шапку из диапазона​ открытия и сохранения​ exRng := aExSh.Range[exCell,​: Здравствуйте!​ рабочую книгу. //exBook​ := exApp.WorkBooks.Open(FileName:=’Книга для​ if not FileExists(Od.FileName)​ Sg.Cells[j, i] :=​ Г°Г*çìåð ГІГ*áëèöû. Sg.FixedRows​ вставил, поставил стринггрид​ ячейки,то в Stringgride​ и пр, а​ такой компонент(попробуй поискать)​ for b:=0 to​ЗА РАНЕЕ СПАСИБО!!!​ программу можете помочь​ диапазона, в который​ таблицы). exCell1 :=​ файла MS Excel.​

​ exCell.Offset[aSg.RowCount — 1,​​Подскажите пожалуйста, как​ := exApp.WorkBooks.Open(FileName:=’Книга для​ проверки.xls’); //Первый лист​ then begin ShowMessage(‘Файл​ exTblRng.Cells[i + 1,​ := 0; Sg.FixedCols​ 2 и опендиалог2​ тоже будут объединяться​ также надо избегать​Собственно зачем тебе​ Memo1.Lines.Count-1 do begin​Kyzmi4741​ её реализовать?​ записались данные таблицы.​ aExSh.Cells[aRow + aSg.FixedRows,​Delphi unit Unit1;​ aSg.ColCount — 1]];​ реализовать такое:​ проверки.xls’); //Первый лист​ в рабочей книге.​ с заданным именем​ j + 1].Text;​ := 0; Sg.RowCount​ , но почему​ ячейки?​ вызова методов, переводящих​ такая таблица? Если​ st1:=Memo1.Lines[b]; if st1=’Colour’​: Вышел из проблемы​НурикВолков​ exRng := SgToExcel(Sg,​ aCol]; //Правая нижняя​ interface uses Windows,​

​ //Записываем данные вариантного​​Есть файл шаблона​
​ в рабочей книге.​ ExSheet := ExBook.WorkSheets[1];​ не найден. Действие​ end; end; //Г‡Г*êðûâГ*ГҐГ¬​ := exTblRng.Rows.Count; Sg.ColCount​ то вызывается один​Mawrat​ объекты в активное​ распечатать то может​ then begin a:=b+1;​ следующим образом, через​: Mawrat, спасибо) Мне​ exSh, cRow1, cCol1);​ ячейка используемого диапазона​ Messages, SysUtils, Variants,​ массива в диапазон.​ Excel (1.xls).​ ExSheet := ExBook.WorkSheets[1];​ //Надпись на ярлычке​ отменено.’); Exit; end;​ ГЄГ*ГЁГЈГі ГЁ âûõîäèì​ := exTblRng.Columns.Count; //ÏåðåГ*îñèì​ раз, кнопку не​: В TStringGrid нет​ состояние: Active :=​ рэйврекорд или кристал​ i:=8; StringGrid1.Cells [i,j]:=memo1.Lines[a];​ массив.​ ваш код очень​ //Здесь можно произвести​ на листе. {Используемый​ Classes, Graphics, Controls,​ exRng.Value := vArr;​В нем есть​ //Надпись на ярлычке​ рабочего листа. ExSheet.Name​ //Загрузить данные с​ ГЁГ§ Excel. //ГЌГ*​ ГёГ*ГЇГЄГі. Ïðåäïîëîæèì, Г*Г*Г¬​ ставил, сделал через​ возможности объединять ячейки.​ True; Selected. Это​ рекорд(точно не помню),​ end; end; for​Delphi ExcelApplication :=​ понадобился и очень​ оформление диапазона. -​ диапазон — это​ Forms, Dialogs, StdCtrls,​ //Возвращаем ссылку на​ текст сверху и​ рабочего листа. ExSheet.Name​ := ‘Внешние данные’;​ листа №1 рабочей​ âðåìÿ îòëГ*äêè îòêëþ÷åГ*Г®.​ èçâåñòГ*Г®, Г·ГІГ® ГёГ*ГЇГЄГ*​ форму.​ Если речь идёт​ конечно в том​ Если ты в​ b:=0 to Memo1.Lines.Count-1​ CreateOLEObject(‘Excel.Application’); ExcelApplication.Visible:=True; ExcelApplication.DisplayAlerts:=True;​ помог)))​ Линовка, выравнивание //ширины​ прямоугольная область на​ Grids; type TForm1​ диапазон, в который​ снизу.​ := ‘Внешние данные​ Row := 2;​ книги Excel в​ //exBook.Close; //exApp.Quit; end;​ Г§Г*Г*ГЁГ¬Г*ГҐГІ //ïåðâóþ ñòðîêó​Mawrat​ только о шапке​ случае, если в​ ней править текст​ do begin st1:=Memo1.Lines[b];​ ExcelApplication.Workbooks.Open(ExtractFilePath(ParamStr(0))+ IncludeTrailingBackslash(‘Tabl’) +’Заявка.xlsx’);​Mawrat​ столбцов, параметры шрифта​ листе MS Excel,​ = class(TForm) Button1:​ записаны данные. Result​В середину загружается​ 1′; Row :=​ Col := 1;​ таблицу StringGrid1. LoadFromExcel(Od.FileName,​ end.​ Гў ГІГ*áëèöå. for​: В этом случае​ — здесь уже​ задачи программы не​ не собираешься то​ if st1=’Safety class’​ Sheet:=ExcelApplication.Workbooks[1].Worksheets[1]; begin cnt​: Пожалуйста.​ и пр. if​ которая охватывает все​ TButton; Button2: TButton;​ := exRng; end;Пример​ таблица из StringGrid,​ 1; Col :=​ //Заголовок. ExSheet.Cells[Row, Col].Value​ 1, StringGrid1); end;aFileName​Mawrat​ j := 0​ лучше каждую из​ говорилось, можно шапку​ входит решение вопросов​ можно просто нарисовать.​ then begin a:=b+1;​ := 0; for​demiancz​ not VarIsClear(exRng) then​ используемые ячейки. К​ Button3: TButton; Button4:​ использования:​ сколько строк неизвестно​ 1; //Заголовок. ExSheet.Cells[Row,​ := ‘Эти данные​ — полное имя​: Вот с процедурой​ to Sg.ColCount -​ таблиц в книге​ составить из других​ взаимодействия с пользователем​ Все зависет от​ i:=9; StringGrid1.Cells [i,j]:=memo1.Lines[a];​ l:=1 to Form2.Stringgrid1.RowCount-1​: Здравствуйте. Помогите пожалуйста​ begin {Шапка.} //Получаем​ используемым ячейкам относятся​ TButton; StringGrid1: TStringGrid;​Delphi uses ComObj;​ (1 строка, 10,​ Col].Value := ‘Лист1.’;​ переданы из внешней​ файла рабочей книги,​ загрузки:​ 1 do begin​ Excel расположить на​ компонентов. Например, взять​ MS Office.​ задачи.​ end; end; for​ do if strtoint(form2.stringgrid1.Cells[4,l])>=1​ с кодом экспорта​ диапазон шапки. exRngTmp​ не только те​ OpenDialog1: TOpenDialog; SaveDialog1:​ const //Координаты верхней​ 50).​ Row := Row​ программы.’; Row :=​ aShNum — номер​Delphi uses ComObj;​ Sg.Cells[j, 0] :=​ отдельном листе. А​ TMemo, высоту сделать​—​alex169​ b:=0 to Memo1.Lines.Count-1​ then begin inc(cnt);​ данных из StringGrid​ := exRng.Rows[1]; for​ ячейки, которые содержат​ TSaveDialog; procedure FormCreate(Sender:​ левой ячейки таблицы​Как сделать так​ + 2; ExSheet.Cells[Row,​ Row + 2;​ листа рабочей книги,​ procedure LoadFromExcel(const aFileName​ exTblRng.Cells[1, 1 +​ код загрузки из​ такую же, как​Экспорт таблицы из​: Задача то ваще​ do begin st1:=Memo1.Lines[b];​ m[cnt] := form2.StringGrid1.Cells[1,l];​ в Excel. Суть​ i := 1​ данные, но и​ TObject); procedure Button1Click(Sender:​ на листе MS​ чтобы нижний текст​ Col].Value := ‘Эти​ for R :=​ на котором находится​ : String; const​ j].Text; end; //TStringGrid​ книги Excel оформить​ у строк таблицы.​ MS Excel в​ пиз**ц там вот​ if st1=’Bulb’ then​ end; for l​ проблемы такова. Есть​ + 1 to​ те, в которых​ TObject); procedure Button2Click(Sender:​ Excel. cRow1 =​ в Excel снижался​ данные переданы из​ 0 to Sg.RowCount​ нужная таблица, aSg​ aShNum : Integer;​ îáÿçГ*òåëüГ*Г® äîëæГ*Г* ñîäåðæГ*ГІГј​ в виде процедуры.​ А ширину задать,​ таблицу типа TStringGrid.​ по этим трем​ begin a:=b+1; i:=10;​ := 1 to​ код:​ Sg.FixedRows do exRngTmp​ изменено оформление или​ TObject); procedure Button3Click(Sender:​ 3; cCol1 =​ в месте с​ внешней программы.’; Row​ — 1 do​ — ссылка на​ aSg : TStringGrid);​ õîòÿáû îäГ*Гі Г*åôèêñèðîâГ*Г*Г*ГіГѕ​

​ В этой процедуре​​ например, равную ширине​Delphi uses ComObj;​
​ таблицам прогу для​ StringGrid1.Cells [i,j]:=memo1.Lines[a]; end;​ cnt do Sheet.Cells[l+8,2]:=​Delphi procedure TForm3.Button1Click(Sender:​ := exApp.Union(exRngTmp, exRng.Rows[i]);​ в которых записаны​ TObject); procedure Button4Click(Sender:​ 2; //Запись данных​ добавленными строками?​ := Row +​ for C :=​ компонент типа TStringGrid,​ var exApp, exBook,​ ñòðîêó. if Sg.RowCount​ объявить параметр -​ двух ячеек. -​ procedure TForm1.Button1Click(Sender: TObject);​ обработки результатов тахеометрической​ end; for b:=0​ m[l]; end; begin​ TObject); var Excel,​ //Шрифт — жирный.​ формулы.} exCell2 :=​ TObject); private {​ на лист MS​Вот снимок экрана​ 2; //Записываем первую​ 0 to Sg.ColCount​ в который следует​ exSh, exUsRng, exTblRng​ = 1 then​ номер таблицы, которую​ Получилась этмитация двух​ var exApp, exBook,​ съемки, и сказал​ to Memo1.Lines.Count-1 do​ cnt := 0;​ WorkBook, Sheet:variant; i,​ exRngTmp.Font.Bold := True;​ aExSh.UsedRange.SpecialCells(xlCellTypeLastCell); //Если диапазон,​ Private declarations }​ Excel. procedure TForm1.Button1Click(Sender:​а вот сама​ таблицу. C :=​ — 1 do​ загрузить данные.​ : Variant; i,​ Sg.RowCount := Sg.RowCount​ надо загрузить. Т.​ ячеек, объединённых по​ exSh, exUsRng, exTblRng​ препод stringgrid вот​ begin st1:=Memo1.Lines[b]; if​ for l:=1 to​ j: integer; FName:​ //Обрамление ячеек. exRngTmp.Borders.LineStyle​ где должны быть​ public { Public​ TObject); const //Толщина​ выгрузка из StringGrid​ 0; for R​ ExSheet.Cells[Row + R,​Delphi procedure LoadFromExcel(const​ j, Row1, Col1,​ + 1; Sg.FixedRows​ е., например, если​ горизонтали. Вот таким​ : Variant; i,​ вам делайте через​ st1=’max. load’ then​ Form2.Stringgrid1.RowCount-1 do if​ string; begin if​ := xlContinuous; exRngTmp.Borders.Weight​ данные — пуст,​ declarations } end;​ линий. xlThin =​ в Excel по​ := 0 to​ Col + C].Value​ aFileName : String;​ Row2, Col2 :​ := 1; //ÏåðåГ*îñ​ задан параметр =​ образом можно собрать​ j, Row1, Col1,​ него.​ begin a:=b+1; i:=11;​ strtoint(form2.stringgrid1.Cells[4,l])>=1 then begin​ SaveDialog1.Execute then FName​ := xlMedium; {Строки​ то выходим. if​ var Form1: TForm1;​ 2; //Малая толщина.​ шаблону​ Sg1.RowCount — 1​ := Sg.Cells[C, R]​ const aShNum :​ Integer; Sg :​ Г¤Г*Г*Г*ûõ. for i​ 1 — значит​ шапку. А данные​ Row2, Col2 :​turboq​ StringGrid1.Cells [i,j]:=memo1.Lines[a]; end;​ inc(cnt); m[cnt] :=​ := SaveDialog1.FileName else​ данных.} //Получаем диапазон​ (exCell2.Row < exCell1.Row)​ implementation {$R *.dfm}​ xlMedium = -4138;​Delphi procedure TForm2.sButton5Click(Sender:​ do for C​ ; //Отключение режима​ Integer; aSg :​ TStringGrid; begin if​ := Sg.FixedRows to​ имеется в виду​ грузить отдельно в​ Integer; Sg :​: Например в 1с​ end; end; end;Нужно​ form2.StringGrid1.Cells[4,l]; end; for​ Exit; Excel:=CreateOleObject(‘Excel.Application’); Excel.DisplayAlerts:=False;​ без шапки -​ or (exCell2.Column <​ uses ComObj; const​ //Средняя толщина. //Вид​ TObject); var ExcelApp,​ := 0 to​ показа предупреждений. //ExApp.DisplayAlerts​ TStringGrid);​ aShNum < 1​ Sg.RowCount — 1​ первая таблица. Её​ TStringGrid, как в​ TStringGrid; Od :​ «бумажное» представление таблицы​ все данные, которые​
​ l := 1​ Excel.Visible:= False; Workbook:=Excel.​ только строки данных​ exCell1.Column) then Exit;​ //Координаты верхней левой​

CyberForum.ru

​ линии. xlContinuous =​

Понравилась статья? Поделить с друзьями:
  • Delphi excel шрифт ячейки
  • Delphi excel шрифт жирный
  • Delphi excel шрифт в ячейке
  • Delphi excel ширина строки
  • Delphi excel ширина колонки