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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Не удается удалить лист из книги Excel 
V
    Опции темы
Mr_Devil
Дата 5.1.2010, 17:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Никак не могу удалить лишние листы из книги. Везде пишут, что так должно работать, но оно не работает smile
Если включить видимость приложения Excel, то оно спрашивает действительно ли я хочу удалить лист (хотя предупреждения отключены). Если ответить "Да", лист удаляется. А если видимость Excel не включать,то новый лист в книге остается.
Excel 2003

Делаю так:
Код

function ProcessPrice(Price_File_Name: string): boolean;
var
 EA1: TExcelApplication;
 EWB1: TExcelWorkbook;
 EWS1: TExcelWorksheet;
 i,j,k,L: integer;    // счетчики
begin
 EWS1:=TExcelWorksheet.Create(nil);
 EWS1.ConnectKind:=ckAttachToInterface;
 EWB1:=TExcelWorkbook.Create(nil);
 EWB1.ConnectKind:=ckAttachToInterface;
 L:=LOCALE_USER_DEFAULT;
 EA1:=TExcelApplication.Create(nil);
 EA1.ConnectKind:=ckNewInstance;
 EA1.AutoQuit:=True;
 EA1.DisplayAlerts[L]:=False;  // отключаем предупреждения
 EA1.Visible[L]:=False;
 EA1.Connect;
 try
   EWB1.ConnectTo(EA1.Workbooks.Open(Price_File_Name,// Filename: WideString;
     2, // UpdateLinks: OleVariant; 2 - never update
     False, // ReadOnly: OleVariant;
     EmptyParam, // Format: OleVariant;
     EmptyParam, // Password: OleVariant;
     EmptyParam, // WriteResPassword: OleVariant;
     EmptyParam, // IgnoreReadOnlyRecommended: OleVariant;
     EmptyParam, // Origin: OleVariant;
     EmptyParam, // Delimiter: OleVariant;
     EmptyParam, // Editable: OleVariant;
     EmptyParam, // Notify: OleVariant;
     EmptyParam, // Converter: OleVariant;
     False, // AddToMru: OleVariant;
     EmptyParam, // Local: OleVariant;
     EmptyParam, // CorruptLoad: OleVariant;
     L));
 except
...
 end;
 EA1.ActiveWorkbook.Sheets.Add(EmptyParam,EmptyParam,1,EmptyParam,L);  // новый лист добавляется, но не удаляется.
//  (EA1.ActiveWorkbook.Sheets[1] as _Worksheet).Name:='Listeg3';
 (EA1.ActiveWorkbook.Sheets[1] as _Worksheet).Delete(L);  // ВОТ ЗДЕСЬ НИЧЕГО НЕ ПРОИСХОДИТ
//  (EA1.ActiveWorkbook.Sheets[4] as _Worksheet).Delete(L);
// закрываем иксель
 EA1.ActiveWorkbook.Close(xlSaveChanges,EmptyParam,EmptyParam,L);
 EA1.Application.Quit;
 EWS1.Free;
 EWB1.Free;
 EA1.Free;
 Result:=True;
end;

PM MAIL ICQ   Вверх
Данкинг
Дата 5.1.2010, 17:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Yersinia pestis
****


Профиль
Группа: Завсегдатай
Сообщений: 8302
Регистрация: 7.11.2006
Где: მოსკოვი

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



А почто код у тебя такой длинный и страшный? smile 
Код

procedure TForm1.FormCreate(Sender: TObject);
var ex:variant;
begin
ex:=createoleobject('excel.application');
ex.visible:=false;
ex.DisplayAlerts:=False;
ex.Workbooks.open('I:\Musor\книга1.xls');
ex.ActiveWorkbook.Sheets[2].Delete;
Ex.ActiveWorkbook.SaveAs('I:\Musor\книга1.xls');
ex.application.quit;
ex:=unassigned;
end;



--------------------
There's nothing left but silent epitaphs.
PM MAIL WWW   Вверх
Mr_Devil
Дата 5.1.2010, 18:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(Данкинг @ 5.1.2010,  17:48)
А почто код у тебя такой длинный и страшный? smile 

Делал как здесь написано: http://forum.vingrad.ru/forum/topic-84634.html  smile 
PM MAIL ICQ   Вверх
Данкинг
Дата 5.1.2010, 18:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Yersinia pestis
****


Профиль
Группа: Завсегдатай
Сообщений: 8302
Регистрация: 7.11.2006
Где: მოსკოვი

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



Mr_Devil, делай, как здесь написано. smile Я с WordApplication (как сервером) вообще никогда не работал.

Это сообщение отредактировал(а) Данкинг - 5.1.2010, 18:58


--------------------
There's nothing left but silent epitaphs.
PM MAIL WWW   Вверх
Mr_Devil
Дата 5.1.2010, 19:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Делаю так:
Код

function ProcessElcoPrice(Price_File_Name: string): boolean;
var
  E:variant;
 begin
  E:=CreateOleObject('Excel.Application'); // создание OLE-объекта
  E.DisplayAlerts:=False;  // отключение сообщений
  E.Visible:=False;
  E.Workbooks.open(Price_File_Name);
  E.ActiveWorkbook.Sheets[1].Delete;
  E.ActiveWorkbook.SaveAs(Price_File_Name);
  E.Application.Quit;
  E:=Unassigned;
end;

Компилятор косо смотрит на "Delete" (Undeclared identifier 'Delete'), но код переваривает. В итоге лист как был, так и остался. + выдается запрос на перезапись файла xls.

Добавлено через 1 минуту и 2 секунды
Цитата(Данкинг @ 5.1.2010,  18:57)
Mr_Devil, делай, как здесь написано. smile Я с WordApplication (как сервером) вообще никогда не работал.

Там и про Excel написано.
PM MAIL ICQ   Вверх
Данкинг
Дата 5.1.2010, 19:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Yersinia pestis
****


Профиль
Группа: Завсегдатай
Сообщений: 8302
Регистрация: 7.11.2006
Где: მოსკოვი

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



Не знаю тогда: у меня этот код рабочий. smile Писал его в D7, Excel 2003.

Цитата(Mr_Devil @  5.1.2010,  19:11 Найти цитируемый пост)
Там и про Excel написано. 

Ну да, я его тоже имел в виду. smile 




--------------------
There's nothing left but silent epitaphs.
PM MAIL WWW   Вверх
Mr_Devil
Дата 5.1.2010, 20:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Сделал новый проект.
Код
unit Unit3;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ComObj, StdCtrls;

type
  TForm3 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form3: TForm3;

implementation

{$R *.dfm}

procedure TForm3.Button1Click(Sender: TObject);
var
  E:Variant;
begin
  E:=CreateOleObject('Excel.Application'); // создание OLE-объекта
  E.DisplayAlerts:=False;  // отключение сообщений
  E.Visible:=False;
  E.Workbooks.open('D:\StockStatus.xls');
  E.ActiveWorkbook.Sheets[1].Delete;
  E.ActiveWorkbook.SaveAs('D:\StockStatus.xls');
  E.Application.Quit;
  E:=Unassigned;
end;

end.

результат тот же :(
Excel2003, BDS 2006  smile 
PM MAIL ICQ   Вверх
Данкинг
Дата 5.1.2010, 20:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Yersinia pestis
****


Профиль
Группа: Завсегдатай
Сообщений: 8302
Регистрация: 7.11.2006
Где: მოსკოვი

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



Цитата(Mr_Devil @  5.1.2010,  20:01 Найти цитируемый пост)
BDS 2006 

У меня студия установлена, но без Дельфи, только Билдер и С#, поэтому в ней проверить не могу. smile Вот проект в D7, попробуй его запустить (только путь к XLS изменить не забудь). Для верности прикладываю и файл XLS, из которого у меня всё отлично удаляется. smile 

Присоединённый файл ( Кол-во скачиваний: 8 )
Присоединённый файл  test2.rar 170,58 Kb


--------------------
There's nothing left but silent epitaphs.
PM MAIL WWW   Вверх
Mr_Devil
Дата 5.1.2010, 20:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Млин :( поставил D7... все тоже самое.

Добавлено через 1 минуту и 24 секунды
щас попробую твой файл
PM MAIL ICQ   Вверх
Mr_Devil
Дата 5.1.2010, 21:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Млин  smile 
Дело оказалось в файле xls. Он какой-то хитрый. Там присутствуют макросы и из него даже твой проект не может удалить лист, более того при сохранении он (Excel) спрашивает заменить ли файл. С твоим файлом (Книга1) все отлично работает (и мой проект тоже) и никаких вопросов не задает, даже после добавления в файл макроса. Попробовал сам сделать своим Excel'ем файл (и даже с макросом) все отлично работает.
Придется, видимо, копировать нужный лист в новую книгу и заменять потом старый файл.

Спасибо smile
PM MAIL ICQ   Вверх
Данкинг
Дата 5.1.2010, 21:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Yersinia pestis
****


Профиль
Группа: Завсегдатай
Сообщений: 8302
Регистрация: 7.11.2006
Где: მოსკოვი

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



Цитата(Mr_Devil @  5.1.2010,  20:46 Найти цитируемый пост)
Млин :( поставил D7... все тоже самое.

Думаю, тут какая-то проблема с офисом, а не с Дельфи.

Добавлено через 1 минуту и 1 секунду
Цитата(Mr_Devil @  5.1.2010,  21:04 Найти цитируемый пост)
Дело оказалось в файле xls. 

Вот и я про то же. Excel - штука часто непредсказуемая. smile 

Это сообщение отредактировал(а) Данкинг - 5.1.2010, 21:04


--------------------
There's nothing left but silent epitaphs.
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "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.1027 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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