Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: ActiveX/СОМ/CORBA > Sheets by name - возможно ?


Автор: uranpro 7.7.2008, 16:45
есть большой файл EXCEL с кучей листов, мне нужно брать название листа и добавлять в др файл EXCEL. многие листы с одинаковыми именами.

возможно как-то так написать ? (синтаксис не знаю)

Код

try
 sheets1.sheetbyname(sheets2.item[i].name);
 shcopy;
except
 sheets1.add(sheets2.item[i].name);
 shcopy;
 end;

Автор: Rodman 7.7.2008, 16:52
а если по номеру обращаться?

Автор: uranpro 7.7.2008, 17:09
по номеру обращаться я умею. мне нужно по имени

Автор: kemiisto 7.7.2008, 17:32
uranpro, Вам нужно добавлять листы только с определённым названием?

Добавлено через 1 минуту и 48 секунд
И что с листами делать не понятно: копировать полностью или только создавать в другом файле пустой лист с тем же именем?
Цитата(uranpro @  7.7.2008,  17:45 Найти цитируемый пост)
многие листы с одинаковыми именами.

И что делать в этом случае?

Добавлено через 4 минуты и 6 секунд
Я вот тут накидал 
Код

var
  E, Source, Dest: Variant;
  i: Integer;
begin
  E := CreateOleObject('Excel.Application');
  E.Workbooks.Open(ExtractFilePath(Application.ExeName) + 'source.xls');
  E.Workbooks.Open(ExtractFilePath(Application.ExeName) + 'dest.xls');
  Source := E.WorkBooks[1];
  Dest := E.Workbooks[2];
  for i := 1 to Source.Sheets.Count do
  begin
    Dest.Sheets.Add(After := Dest.Sheets[Dest.Sheets.Count]);
    Dest.Sheets[Dest.Sheets.Count].Name := Source.Sheets[i].Name;
    Dest.Save;
  end;
  E.Quit;
  E := Unassigned;
end;

Это просто создание в одном файле листов с названиями из другого. Проект приаатачу, но, видимо, это не совсем то? 

Автор: uranpro 7.7.2008, 17:40
kemiisto, в коде написано: если не получилось обращение по имени(листа с этим именем нет), то создается новый лист. мне нужно узнавать, есть ли лист с нужным именем. не через циклы

Добавлено через 1 минуту и 46 секунд
в обоих файлах по 1101 листу, если буду юзать циклы, то я максимум пройдусь по ним 1101*1101 раз, а связь delphi  с excel`ем медленная!(

Добавлено через 3 минуты и 15 секунд
я и хочу узнать, как можно обойтись без циклов, мб можно ссылаться по имени листа.

Автор: kemiisto 7.7.2008, 17:55
uranpro, так можно вместо числового индекса прямо имя писать:
Код

try
  Dest.Sheets.Add(After := Dest.Sheets[Dest.Sheets.Count]);
  Dest.Sheets[Dest.Sheets.Count].Name := Source.Sheets['тра-ля-ля'].Name;
finally
  Dest.Save;
end;

Автор: uranpro 7.7.2008, 18:00
kemiisto, ВОТ !!! Source.Sheets['тра-ля-ля'].Name; !!! СПАСИБО, это мне и нужно))

Добавлено через 1 минуту и 20 секунд
просто создать лист с тем же именем, только в другом сервере

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)