![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
|
Добрый день
Начал осваивать компонент 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 |