|
Вопрос # 1 126/ вопрос открыт / |
|
Доброго времени суток, уважаемые эксперты!Я заношу в лист excel содержание таблицы StringGrid.Если лист новый то он создаётся и заполняется,а вот если такой лисьт уже существует ,то мне хотелось бы обновить его .Под фразой "обновить лист excel"я понимаю удаление листа и добавления его снова,но уже с обновлёнными данными,т.е я думаю надо вывести сообщение типа 'Лист "'+sheet+'" существует.' Обновить содержимое листа?'
Да- удаляем лист и добавляем его снова,конечно с заполнением
Нет-открываем имеющийся
 |
Вопрос задал: GAZ (статус: Посетитель)
Вопрос отправлен: 20 ноября 2007, 07:04
Состояние вопроса: открыт, ответов: 1.
|
Ответ #1. Отвечает эксперт: Николай Рубан
Здравствуйте, GAZ!
В продолжение к ответу на вопрос №1120.
const path='c:\temp\Office\'; //путь к файлу
fname='xls_file.xls'; //имя файла
sheet='mysheet'; //название листа
lcid=LOCALE_USER_DEFAULT;
...
if not sh_exist then
begin //создаем лист если его нет
ExlWorkSheet:=ExlApp.Worksheets.Add(EmptyParam, EmptyParam,
EmptyParam, EmptyParam, lcid) as ExcelWorksheet;
ExlWorkSheet.Activate(lcid); //делаем лист активным
ExlWorkSheet.Name:=sheet; //задаем листу имя
ExlWorkBook.Save(lcid); //сохраняем изменения
end
else
begin
if MessageDlg('Sheet with name "'+sheet+'" is exist.'+#13+'You want to refresh a sheet?',mtConfirmation,
[mbYes, mbNo], 0)=IDYes //выводим диалоговое окно
then
begin
ExlWorkSheet:=ExlApp.ActiveWorkbook.Sheets[sheet] as ExcelWorksheet; //связываем объект ExlWorkSheet с
листом в рабочей книге у которого имя sheet
ExlWorksheet.Delete(lcid); //удаляем лист
ExlWorkSheet:=ExlApp.Worksheets.Add(EmptyParam, EmptyParam,
EmptyParam, EmptyParam, lcid) as ExcelWorksheet; //создаем новый
ExlWorkSheet.Activate(lcid);
ExlWorkSheet.Name:=sheet; //задаем имя
//делаете соответствующие изменения (вносите данные)
ExlWorkBook.Save(lcid); //сохраняем изменения
end;
end;
...
Good Luck!!!
Приложение: Переключить в обычный режим- unit Unit1;
-
- interface
-
- uses
- Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
- Dialogs, StdCtrls,OleServer, ExcelXP;
-
- type
- TForm1 = class(TForm)
- Button1: TButton;
- procedure Button1Click(Sender: TObject);
- private
- { Private declarations }
- public
- { Public declarations }
- end;
-
- const path='D:ProjectOffice';
- fname='xls_file.xls';
- sheet='mysheet';
- lcid=LOCALE_USER_DEFAULT;
- var
- Form1: TForm1;
- ExlApp: TExcelApplication;
- ExlWorkBook: ExcelWorkbook;
- ExlWorkSheet: ExcelWorkSheet;
-
- implementation
-
- {$R *.dfm}
-
- procedure TForm1.Button1Click(Sender: TObject);
- var i:integer;
- sh_exist:boolean;
- begin
- ExlApp:=TExcelApplication.Create(Self);
- ExlApp.ConnectKind := ckNewInstance;
- ExlApp.AutoQuit:=true;
- ExlApp.Visible[lcid]:=true;
- if not FileExists(path+fname)
- then
-
- ExlWorkBook:=ExlApp.Workbooks.Add(EmptyParam,0);
- ExlWorkBook.SaveAs(path+fname,
- EmptyParam, EmptyParam, EmptyParam, EmptyParam,
- EmptyParam, xlNoChange, EmptyParam, EmptyParam,
- EmptyParam, EmptyParam, EmptyParam, lcid);
- end
-
- sh_exist:=false;
-
- if (ExlWorkBook.Sheets[i] as ExcelWorksheet).Name = sheet
- then begin sh_exist:=true; break; end;
-
- if not sh_exist then
-
- ExlWorkSheet:=ExlApp.Worksheets.Add(EmptyParam, EmptyParam,
- EmptyParam, EmptyParam, lcid) as ExcelWorksheet;
-
-
- ExlWorkBook.Save(lcid);
- end
- else
- begin
-
- then
- begin
-
-
- ExlWorkSheet:=ExlApp.Worksheets.Add(EmptyParam, EmptyParam,
-
- ExlWorkSheet.Activate(lcid);
-
- ExlWorkBook.Save(lcid);
- end;
- end;
-
-
- end;
-
- end.
 |
Ответ отправил: Николай Рубан (статус: 10-ый класс)
Время отправки: 20 ноября 2007, 10:05
Оценка за ответ: 5
|
Мини-форум вопроса
Всего сообщений: 1; последнее сообщение — 20 ноября 2007, 18:16; участников в обсуждении: 1.
|
GAZ (статус: Посетитель), 20 ноября 2007, 18:16 [#1]:
Н.Рубану:
Я не пойму почему,но метод ExlWorkBook.Save(lcid); - у меня не работает.Да Excel сообщает мне что файл существует и спрашивает стоит ли его заменить,но если я выбираю ДА ничего не происходит(это я про случай,когда в существующую книгу добавляется новый лист).
Всё перезаписывается если вместо ExlWorkBook.Save(lcid); использовать:
ExlWorkBook.SaveAs(path+fname,
EmptyParam, EmptyParam, EmptyParam, EmptyParam,
EmptyParam, xlNoChange, EmptyParam, EmptyParam,
EmptyParam, EmptyParam, EmptyParam, lcid);
|
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|