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