| 
| 
 | Вопрос # 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]:Задавайте еще один вопрос, а я пока поробую реализовать  ))) |  Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте. |