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 поля и таблицы,droiderDelphi 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; for19vitek 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.ColCountMawrat 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.InitialDirMawrat координатах: 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) thenMawrat 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-1Delphi 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 ifMawrat 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 dohttp://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 jalex169, не забывай таблицы — из 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 — 1Mawrat 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 beginKyzmi4741 её реализовать? записались данные таблицы. 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; forDelphi 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;aFileNameMawrat j := 0 лучше каждую из говорилось, можно шапку входит решение вопросов можно просто нарисовать. then begin a:=b+1; := 0; fordemiancz 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 =