Модераторы: MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Добавление листов в Excel-e 
:(
    Опции темы
Demo
Дата 13.3.2007, 12:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 10.10.2006

Репутация: нет
Всего: нет



Добрый день! Помогите решить проблему.
Я создаю отчет в Excele с помощью шаблона. Документ сохраняется в нужном мне файле при помощи следующего кода:
XLApp.Application.ActiveWorkBook.SaveAs(ExtractFilePath(Application.ExeName)+'Name.xls');
Мне нужно, чтобы каждый раз добавлялся лист в файл, а сейчас происходит замена одного листа другим.
Подскажите пожалуйста, как должен выглядеть код. 
Была попытка использовать XLApp.Worksheets.Add, но каждый раз добавлялся пустой лист, а лист с информацией изменялся...

PM MAIL   Вверх
SergeBS
Дата 13.3.2007, 14:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1111
Регистрация: 10.6.2005
Где: Владимир

Репутация: нет
Всего: 22



Demo, 
DelphiWorld:
Код

procedure AddWorkSheet(WorkBookName, WorkSheetName: Ansistring);
var
  k, j: integer;
begin
  if VarIsEmpty(Excel) = false then
  begin
    k := WorkBookIndex(WorkBookName);
    if k <> 0 then
    begin
      Excel.DisplayAlerts := False;
      Excel.Workbooks[k].Sheets.Add;
      j := WorkSheetIndex(WorkBookName, WorkSheetName);
      if j = 0 then
        Excel.Workbooks[k].ActiveSheet.Name := WorkSheetName;
    end;
  end;
end;

PM MAIL   Вверх
Demo
Дата 14.3.2007, 10:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 10.10.2006

Репутация: нет
Всего: нет



Попробовала данныйкод, но компьютер ругается на индексы. Что это за индексы: WorkBookIndex, WorkSheetIndex?
PM MAIL   Вверх
SergeBS
Дата 14.3.2007, 10:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1111
Регистрация: 10.6.2005
Где: Владимир

Репутация: нет
Всего: 22



Demo, 
На DelphiWorld сходить и все посмотреть/скачать лениво? Зря.
Код

function WorkBookIndex(WorkBookName: Ansistring): integer;
var
  i, n: integer;
begin
  //проверка на наличие книги с этим именем
  n := 0;
  if VarIsEmpty(Excel) = false then
    for i := 1 to Excel.WorkBooks.Count do
      if Excel.WorkBooks[i].FullName = WorkBookName then
      begin
        n := i;
        break;
      end;
  WorkBookIndex := n;
end;

function WorkSheetIndex(WorkBookName, WorkSheetName: Ansistring): integer;
var
  i, k, n: integer;
begin
  //проверка на наличие листа с этим именем в книге с этим именем
  n := 0;
  if VarIsEmpty(Excel) = false then
  begin
    k := WorkBookIndex(WorkBookName);
    for i := 1 to Excel.WorkBooks[k].Sheets.Count do
      if Excel.WorkBooks[k].Sheets[i].Name = WorkSheetName then
      begin
        n := i;
        break;
      end;
  end;
  WorkSheetIndex := n;
end;


PM MAIL   Вверх
Albinos_x
Дата 14.3.2007, 22:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Evil Skynet
****


Профиль
Группа: Комодератор
Сообщений: 3288
Регистрация: 28.5.2004
Где: X-6120400 Y-1 4624650

Репутация: 15
Всего: 108



Цитата(Demo @  13.3.2007,  12:38 Найти цитируемый пост)
Была попытка использовать XLApp.Worksheets.Add, но каждый раз добавлялся пустой лист, а лист с информацией изменялся...

ну тык переключаться надо на вновь созданную страницу...
покажи код как работаешь слистом


--------------------
"Кто владеет информацией, тот владеет миром"    
Уинстон Черчилль
PM MAIL ICQ   Вверх
lotax
Дата 16.3.2007, 12:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 121
Регистрация: 18.4.2005
Где: KZ

Репутация: нет
Всего: нет



Попробуй так:
Код


uses
  ActiveX, ComObj;

var
  ServerIsRunning : Boolean;
  Unknown: IUnknown;
  Result: HResult;
  AppProgID: String;
  App: Variant;
begin
  // Указать программный идентификатор приложения-сервера
  AppProgID := 'Excel.Application';
  ServerIsRunning := False;
  Result := GetActiveObject(ProgIDToClassID(AppProgID),nil,Unknown);
  if (Result = MK_E_UNAVAILABLE) then
    // Создать один экземпляр сервера
    App := CreateOleObject(AppProgID)
  else
    begin
    // Соединиться с уже запущенной копией сервера
    App := GetActiveOleObject(AppProgID);
    ServerIsRunning := True;
  end;
  // показать окно приложения на экране
  App.Visible := True;
  App.Workbooks.Open(ExtractFilePath(Application.ExeName)+'Name.xls');
  App.Sheets.Add;
  //------------------------------------------------------
  //
  // Здесь выполняются другие действия
  //------------------------------------------------------
  //Сохраняем файл
  App.DisplayAlerts:=False;
  App.ActiveWorkBook.Save;
  //
  //------------------------------------------------------
  if not ServerIsRunning then App.Quit;
  App:=Unassigned;
end;



Это сообщение отредактировал(а) lotax - 16.3.2007, 12:51
--------------------
Говори, что думаешь и думай, что говоришь.
PM MAIL ICQ   Вверх
Albinos_x
Дата 16.3.2007, 22:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Evil Skynet
****


Профиль
Группа: Комодератор
Сообщений: 3288
Регистрация: 28.5.2004
Где: X-6120400 Y-1 4624650

Репутация: 15
Всего: 108



lotax, Ваш ответ не имеет ничего общего с заданным вопросом !!!...


--------------------
"Кто владеет информацией, тот владеет миром"    
Уинстон Черчилль
PM MAIL ICQ   Вверх
Demo
Дата 23.3.2007, 12:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 10.10.2006

Репутация: нет
Всего: нет



Я открываю шаблон, устанавливаю определенные свойства...
Код

 XLApp:=CreateOleObject('Excel.Application');
  XLApp.Visible:=False;
  XLApp.DisplayAlerts:=True;
  XLApp.WorkBooks.Open('D:\Папка1\Шаблон.xls');
  XLApp.Workbooks[1].WorkSheets[1].Name:=DateToStr(Date);
  Column:=XLApp.Workbooks[1].WorkSheets[DateToStr(Date)].Columns;
  Sheet:=XLApp.Workbooks[1].Sheets[DateToStr(Date)];

Затем вношу нужные мне данные
...................
...................
--После всех данных я и пытаюсь реализовать поставленную задачу.


...................
И делаю видимым документ
   XLApp.Visible:=True;

Спасибо за код! Я вот думаю, а нельзя ли это сделать как-нибудь компактнее?


Это сообщение отредактировал(а) Girder - 26.3.2007, 11:13
PM MAIL   Вверх
Demo
Дата 25.3.2007, 17:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 10.10.2006

Репутация: нет
Всего: нет



Эту задачу пробую решить другим способом... Хочу добавить листы копированием... Копирование листа в новую рабочую книгу. При копировании лист всегда добавляется новый. Это мне как раз нужно.
Пишу:
XLApp.Sheets.Copy(Здесь нужно указать параметры - но вопрос: Какие)
В книге написано, что там 3 параметра, один из них - наименование книги - куда копировать, а остальные - незнаю. 
Если кто знает, подскажите, пожалуйста? Очень нужно!!!
PM MAIL   Вверх
Albinos_x
Дата 26.3.2007, 12:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Evil Skynet
****


Профиль
Группа: Комодератор
Сообщений: 3288
Регистрация: 28.5.2004
Где: X-6120400 Y-1 4624650

Репутация: 15
Всего: 108



 копировать лист с указанием необходимой книги:  
Код

  ...  
  var ran : OleVariant;  
  ...  
  ran:=ExcelWorkbook1.ActiveSheet;  
  ExcelApplication1.Sheets.Copy(ran,EmptyParam,0);  
  ...  

   
 в новую книгу:  
Код
  ...  
  ExcelApplication1.Sheets.Copy(EmptyParam,EmptyParam,0);  
  ...  




--------------------
"Кто владеет информацией, тот владеет миром"    
Уинстон Черчилль
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: ActiveX/СОМ/CORBA"

Rrader
Girder

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами


  • Литературу по Delphi обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Delphi
  • Вопросы по SQL и вопросы по базам данных, не связанные с Delphi, задавать здесь

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Rrader, Girder.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: ActiveX/СОМ/CORBA | Следующая тема »


 




[ Время генерации скрипта: 0.0513 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.