Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 26.06.2019, 11:36   #1
Vitaly1C
 
Регистрация: 26.06.2019
Сообщений: 3
По умолчанию Копировать лист Excel

Добрый день !
Помогите адаптировать работающий код на Delphi

Вот работающий код на 1С:

Код:
Процедура КопироватьЛист(Команда)
	
	Excel = новый COMОбъект("Excel.Application");
	
	ИмяФайла = "c:\VITAL\Книга1.xlsx";
	// Подключились успешно, открываем файл	
    Excel.Workbooks.Open(ИмяФайла);
	
	Sheet1 = Excel.Sheets("Лист1");
	Sheet1.Range("$A$1:$D$9").Select();	
	Excel.Selection.Copy();
	
	Sheet2 = Excel.Sheets.Add();
	Sheet2.Range("$A$1:$D$9").Select();	
	Sheet2.Paste();
		
	Excel.ActiveWorkbook.Save();
	Excel.ActiveWorkbook.Close();
КонецПроцедуры
Казалось бы элементарно, но тоже самое в Delphi (последняя версия) не работает ???
-----------------------------------------------------------
Все переменные объявлены как Variant,

Sheet1 = Excel.Sheets("Лист1"); тут вываливается ошибка {Член коллекции не найден}

______________________
Используйте тег [CODE] (кнопка [CODE] в форме сообщения) при вставке кода на форум. Подробнее в FAQ

Последний раз редактировалось Alex11223; 26.06.2019 в 11:43.
Vitaly1C вне форума Ответить с цитированием
Старый 26.06.2019, 11:55   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от Vitaly1C Посмотреть сообщение
Казалось бы элементарно, но тоже самое в Delphi (последняя версия) не работает ???
где код Delphi ?

99.99% ошибка в кодировкой символов.
в свежих Delphi это Unicode, а что там в COM (Excel.Application) - точно не известно.

Попробуйте, для начала, переименовать вручную в таблице "Лист1" в "List1"
и вызвать в Delphi
Код:
Sheet1 = Excel.Sheets("List1");

Цитата:
Сообщение от Vitaly1C Посмотреть сообщение
Все переменные объявлены как Variant,
говорят, лучше через OleVariant

Цитата:
Код:
var
   ExcelApp  : OleVariant; 
   sFileName : string;
begin
   try
      ExcelApp := GetActiveOleObject('Excel.Application');
   except
      try
         // If no instance of Excel is running, try to Create a new Excel Object
         ExcelApp := CreateOleObject('Excel.Application');
     except
         ShowMessage('Cannot start Excel (or Excel not installed ?)');
         Exit;
     end;
   end;

   sFileName := 'C:\test.xlsm'; //путь надо подправить, к примеру на ExtractFilePath(Application.EXEName)
   ExcelApp.WorkBooks.Open(sFileName);

Последний раз редактировалось Serge_Bliznykov; 26.06.2019 в 12:00.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 26.06.2019, 12:08   #3
Vitaly1C
 
Регистрация: 26.06.2019
Сообщений: 3
По умолчанию

Это я проверю ! Только файл попадает уже с названием листа Лист1, может тогда есть возможность обратиться к ПЕРВОМУ листу ?! типа

Код:
Sheet1 = Excel.Sheets(0); // или 1 ?
Vitaly1C вне форума Ответить с цитированием
Старый 26.06.2019, 12:26   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от Vitaly1C Посмотреть сообщение
ожет тогда есть возможность обратиться к ПЕРВОМУ листу ?! типа
да, конечно:

Код:
  exBook := exApp.WorkBooks[1]; 
  exSh := exBook.Worksheets[1];
и не забудьте использовать OLEVariant
(см. выше)
Serge_Bliznykov вне форума Ответить с цитированием
Старый 26.06.2019, 14:17   #5
Vitaly1C
 
Регистрация: 26.06.2019
Сообщений: 3
По умолчанию

Спасибо за советы ! Помогло.
P.S. Еще были грабли с тем, что устанавливалось .Visible = True в начале обработки; Убрал, - все в порядке !
Vitaly1C вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как копировать ячейки в другой лист кнопкой 5mrs Microsoft Office Excel 3 30.01.2015 13:49
Копировать нескольку строку в другой лист с условиями Aqil_f Microsoft Office Excel 2 29.01.2015 11:41
Копировать весь лист tae1980 Microsoft Office Excel 7 12.01.2012 17:48
Копировать лист Excel из одной книги в другую через Delphi. S_Yevgeniy Общие вопросы Delphi 1 24.10.2011 15:55
Копировать лист и задать имя Leanna Microsoft Office Excel 5 19.02.2008 16:40