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

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

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

Delphi.int.ru Expert

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

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

#   

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


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

Подробнее »



Вопрос # 1 120

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

Здравствуйте, уважаемые эксперты!Работаю с TExcelApplication.Помогите мне с частью кода. Суть в следующем,перед тем как я начну,заполнять экземпляр Excel,я хочу что бы,

в определённом каталоге путь до которого Path,если нет экземпляра книги с моим именем(например Work.work),должен этот экземпляр создаться.

Если он существует,то смотрим есть ли в нём лист с моим именем(например Work.experiment),если его нет этот лист должен создаться,если такой лист есть,его содержание должно обновиться.Только пожалуйста не отсылайте к статьям,покажите пожалуйста на примере.

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

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

Приложение:
  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]:=false;
  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. ExlWorkSheet.Activate(lcid);
  61. ExlWorkSheet.Name:=sheet;
  62. ExlWorkBook.Save(lcid);
  63. end
  64. else ShowMessage('Sheet with name "'+sheet+'" is exist');
  65.  
  66.  
  67. end;
  68.  
  69. end.


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


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

Всего сообщений: 4; последнее сообщение — 19 ноября 2007, 21:36; участников в обсуждении: 2.
GAZ

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

GAZ (статус: Посетитель), 19 ноября 2007, 21:14 [#3]:

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

Николай Рубан (статус: 10-ый класс), 19 ноября 2007, 21:36 [#4]:

Задавайте еще один вопрос, а я пока поробую реализовать ;))))

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

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