|
Вопрос # 1 120/ вопрос открыт / |
|
Здравствуйте, уважаемые эксперты!Работаю с TExcelApplication.Помогите мне с частью кода. Суть в следующем,перед тем как я начну,заполнять экземпляр Excel,я хочу что бы,
в определённом каталоге путь до которого Path,если нет экземпляра книги с моим именем(например Work.work),должен этот экземпляр создаться.
Если он существует,то смотрим есть ли в нём лист с моим именем(например Work.experiment),если его нет этот лист должен создаться,если такой лист есть,его содержание должно обновиться.Только пожалуйста не отсылайте к статьям,покажите пожалуйста на примере.
 |
Вопрос задал: GAZ (статус: Посетитель)
Вопрос отправлен: 17 ноября 2007, 11:58
Состояние вопроса: открыт, ответов: 1.
|
Ответ #1. Отвечает эксперт: Николай Рубан
Здравствуйте, GAZ!
Вот конкретный пример с комментариями, если что не понятно обращайтесь (полный код модуля находиится в приложении):
const path='c:\temp\Office\'; //путь к файлу
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]:=false;
if not FileExists(path+fname)
then
begin //создаем, если файла нет
ExlWorkBook:=ExlApp.Workbooks.Add(EmptyParam,0);
ExlWorkBook.SaveAs(path+fname,
EmptyParam, EmptyParam, EmptyParam, EmptyParam,
EmptyParam, xlNoChange, EmptyParam, EmptyParam,
EmptyParam, EmptyParam, EmptyParam, lcid);
end
else ExlWorkBook:=ExlApp.Workbooks.Add(path+fname, lcid); //открываем, если файл существует
sh_exist:=false;
for i:=1 to ExlWorkBook.Sheets.Count do //проверяем существует ли нужный лист
if (ExlWorkBook.Sheets[i] as ExcelWorksheet).Name = sheet
then begin sh_exist:=true; break; end;
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 ShowMessage('Sheet with name "'+sheet+'" is exist');
ExlApp.Disconnect; //завершаем работу с Excel
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]:=false;
- 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;
- ExlWorkSheet.Activate(lcid);
- ExlWorkSheet.Name:=sheet;
- ExlWorkBook.Save(lcid);
- end
- else ShowMessage('Sheet with name "'+sheet+'" is exist');
-
-
- end;
-
- end.
 |
Ответ отправил: Николай Рубан (статус: 10-ый класс)
Время отправки: 19 ноября 2007, 02:20
Оценка за ответ: 5
|
Мини-форум вопроса
Всего сообщений: 4; последнее сообщение — 19 ноября 2007, 21:36; участников в обсуждении: 2.
|
GAZ (статус: Посетитель), 19 ноября 2007, 17:37 [#1]:
А не подскажете как лучше обновить значения,если лист создан,т.е
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
//ShowMessage('Sheet with name "'+sheet+'" is exist');
вот здесь открываем и обновляем
|
|
Николай Рубан (статус: 10-ый класс), 19 ноября 2007, 19:03 [#2]:
А что Вы понимаете под фразой "обновить лист excel"?
Т.е. просто его пересчитать, так сэмулируйте нажатие клавиши F9.
|
|
GAZ (статус: Посетитель), 19 ноября 2007, 21:14 [#3]:
Я заношу в лист excel содержание таблицы StringGrid,так под фразой "обновить лист excel"я понимаю удаление листа и добавления его снова,т.е я думаю надо вывести сообщение типа 'Лист "'+sheet+'" существует.' Обновить содержимое листа?'
Да- удаляем лист и добавляем его снова,конечно с заполнением
Нет-открываем имеющийся
|
|
Николай Рубан (статус: 10-ый класс), 19 ноября 2007, 21:36 [#4]:
Задавайте еще один вопрос, а я пока поробую реализовать )))
|
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|