Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 1 126

/ вопрос открыт /

Доброго времени суток, уважаемые эксперты!Я заношу в лист excel содержание таблицы StringGrid.Если лист новый то он создаётся и заполняется,а вот если такой лисьт уже существует ,то мне хотелось бы обновить его .Под фразой "обновить лист excel"я понимаю удаление листа и добавления его снова,но уже с обновлёнными данными,т.е я думаю надо вывести сообщение типа 'Лист "'+sheet+'" существует.' Обновить содержимое листа?'
Да- удаляем лист и добавляем его снова,конечно с заполнением
Нет-открываем имеющийся

GAZ Вопрос ожидает решения (принимаются ответы, доступен мини-форум)

Вопрос задал: 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!!!

Приложение:
  1. unit Unit1;
  2.  
  3. interface
  4.  
  5. uses
  6. Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  7. Dialogs, StdCtrls,OleServer, ExcelXP;
  8.  
  9. type
  10. TForm1 = class(TForm)
  11. Button1: TButton;
  12. procedure Button1Click(Sender: TObject);
  13. private
  14. { Private declarations }
  15. public
  16. { Public declarations }
  17. end;
  18.  
  19. const path='D:ProjectOffice';
  20. fname='xls_file.xls';
  21. sheet='mysheet';
  22. lcid=LOCALE_USER_DEFAULT;
  23. var
  24. Form1: TForm1;
  25. ExlApp: TExcelApplication;
  26. ExlWorkBook: ExcelWorkbook;
  27. ExlWorkSheet: ExcelWorkSheet;
  28.  
  29. implementation
  30.  
  31. {$R *.dfm}
  32.  
  33. procedure TForm1.Button1Click(Sender: TObject);
  34. var i:integer;
  35. sh_exist:boolean;
  36. begin
  37. ExlApp:=TExcelApplication.Create(Self);
  38. ExlApp.ConnectKind := ckNewInstance;
  39. ExlApp.AutoQuit:=true;
  40. ExlApp.Visible[lcid]:=true;
  41. if not FileExists(path+fname)
  42. then
  43.  
  44. ExlWorkBook:=ExlApp.Workbooks.Add(EmptyParam,0);
  45. ExlWorkBook.SaveAs(path+fname,
  46. EmptyParam, EmptyParam, EmptyParam, EmptyParam,
  47. EmptyParam, xlNoChange, EmptyParam, EmptyParam,
  48. EmptyParam, EmptyParam, EmptyParam, lcid);
  49. end
  50.  
  51. sh_exist:=false;
  52.  
  53. if (ExlWorkBook.Sheets[i] as ExcelWorksheet).Name = sheet
  54. then begin sh_exist:=true; break; end;
  55.  
  56. if not sh_exist then
  57.  
  58. ExlWorkSheet:=ExlApp.Worksheets.Add(EmptyParam, EmptyParam,
  59. EmptyParam, EmptyParam, lcid) as ExcelWorksheet;
  60.  
  61.  
  62. ExlWorkBook.Save(lcid);
  63. end
  64. else
  65. begin
  66.  
  67. then
  68. begin
  69.  
  70.  
  71. ExlWorkSheet:=ExlApp.Worksheets.Add(EmptyParam, EmptyParam,
  72.  
  73. ExlWorkSheet.Activate(lcid);
  74.  
  75. ExlWorkBook.Save(lcid);
  76. end;
  77. end;
  78.  
  79.  
  80. end;
  81.  
  82. end.


Ответ отправил: Николай Рубан (статус: 10-ый класс)
Время отправки: 20 ноября 2007, 10:05
Оценка за ответ: 5


Мини-форум вопроса

Всего сообщений: 1; последнее сообщение — 20 ноября 2007, 18:16; участников в обсуждении: 1.
GAZ

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);

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 16:22
Выполнено за 0.03 сек.