|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Экспорт из StringGrid в Excel (TXLSFile)
Добрый день
Начал осваивать компонент TXLSFile и столкнулся вот с какой проблемой: История следующая: 1. открываю файл Excel, из него экспортирую базу данных в StringGrid 2. в StringGrid провожу некие коррекции базы данных 3. базу обратно экспортирую из StringGrid в исходный файл Excel, записываю и файл закрываю 4. финиш ...все очень посто, но вот шаг №3 меня неприятно удивил. Дело в том, что почему-то экспорт происходит, но без исправлений, внесенных в StringGrid. Т.е. записывается в файл то, что было из этого файла получено ранее. Тестовый проект в прикрепленном архиве 1. жмем на "Старт" 2. дважды кликаем по строке в StringGrid 3. меняем статус заказа (или не меняем) 4. жмем "Запись" Спасибо за внимание. |
#2
|
|||
|
|||
На всякий случай публикую код:
Код:
unit Unit1; interface uses ShellAPI, XLSFile, Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, Grids, RzGrids, RzButton, StdCtrls, RzCmboBx, ExtCtrls, RzPanel, XLSExportComp; type TForm1 = class(TForm) RzStringGrid38: TRzStringGrid; RzPanel10: TRzPanel; Label92: TLabel; Label37: TLabel; RzBitBtn25: TRzBitBtn; RzComboBox45: TRzComboBox; RzBitBtn1: TRzBitBtn; XLSExportRzStringGrid38: TXLSExportStringGrid; procedure RzButton1Click(Sender: TObject); procedure RzStringGrid38DblClick(Sender: TObject); procedure RzBitBtn25Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; xf: TXLSFile; R, C, N: integer; S, L: string; implementation {$R *.dfm} procedure OpenFileInOSShell(AFile: string); begin ShellExecute(0, 'open', PChar(AFile), nil, nil, SW_SHOW); end; procedure TForm1.RzButton1Click(Sender: TObject); begin xf:= TXLSFile.Create; xf.OpenFile('db.xls'); L:='не пусто'; N:=0; with xf.Workbook.Sheets[0] do begin//определение количества заполненных строк в базе while L<>'' do begin S:=Cells[N, 1].Value; L:=Cells[N, 0].Value; N:=N+1; end; RzStringGrid38.ColCount:=21; RzStringGrid38.RowCount:=N-1; end; for R:=1 to N do begin for C:=0 to 20 do begin with xf.Workbook.Sheets[0] do L:=Cells[R,C].Value; RzStringGrid38.Cells[C,R-1]:=L; end; end; xf.Destroy; end; procedure TForm1.RzStringGrid38DblClick(Sender: TObject); begin RzPanel10.Visible:=true; Label37.Caption:=RzStringGrid38.cells[0,RzStringGrid38.row]; if (RzStringGrid38.cells[20,RzStringGrid38.row]='в производстве') or (RzStringGrid38.cells[20,RzStringGrid38.row]='') then RzComboBox45.ItemIndex:=0; if RzStringGrid38.cells[20,RzStringGrid38.row]='сдан на склад' then RzComboBox45.ItemIndex:=1; if RzStringGrid38.cells[20,RzStringGrid38.row]='отменен' then RzComboBox45.ItemIndex:=2; end; procedure TForm1.RzBitBtn25Click(Sender: TObject); begin RzStringGrid38.cells[20,RzStringGrid38.row]:=RzComboBox45.Text;//изменение статуса заказа RzStringGrid38.cells[2,RzStringGrid38.row]:=datetostr(date);//дата изменения статуса RzStringGrid38.cells[5,RzStringGrid38.row]:=timetostr(time);//время изменения статуса xf:= TXLSFile.Create; xf.OpenFile('db.xls'); with xf.Workbook.Sheets[0] do XLSExportRzStringGrid38.ExportData(0, 3, 0); xf.SaveAs('db.xls'); xf.Destroy; RzPanel10.Visible:=false; end; end. Последний раз редактировалось Admin, 28.05.2012 в 13:53. |
#3
|
|||
|
|||
Цитата:
во вторых чо за порно с with? в третьих в итоге ты тупо открываеш файл и сохраняеш егоже без изменений |
#4
|
|||
|
|||
Начальник, не будь таким строгим
Я самоучка... Давай разберемся: 1. ..."вообще нихпанятно зачем открывать файл если экспортируеш из стринггрида"... Файл я открываю перед экспортом потому, что он должным образом отформатирован. И в файле не только этот лист. Мне так удобнее с организационной точки зрения. 2. ... "во вторых чо за порно с with?"... Да вроде не порно... Я работаю с первым листом книги. 3. ..."в третьих в итоге ты тупо открываеш файл и сохраняеш егоже без изменений"... Да я знаю, что так и происходит Я не пойму, как из стринггрида выгрузить в имеющийся файл. |
#5
|
|||
|
|||
Цитата:
и на будущее, забудь про with вообще,тогда хотябы будеш видеть что происходит ps не думай что ктото будет устанавливать 2пакета компонентов чтобы написать тебе код Последний раз редактировалось robt, 28.05.2012 в 13:55. |
#6
|
|||
|
|||
Начал описывать и осознал, что номер листа указывается в экспорте.
Действительно, with оказалась из разряда "порно"... Спасибо. Однако, насколько я понимаю, это из области глупостей, не влияющих на конечный результат. |
#7
|
|||
|
|||
Цитата:
напрямую влияет на читаемость и понимание кода и обычно в худшую сторону, никах оптимизаций кода и плюсов он не дает вообще лучше сто раз скопипастить имя объекта для обращения к свойствам чем разгребать потом чОпроисходит в рамках with |