Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: 1 [2]  Все   Вниз
  Печать  
Автор Тема: Выгрузка данных в MS Excel  (Прочитано 45437 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Aguilina
Интересующийся

kz
Offline Offline
Пол: Женский

« Ответ #30 : 06-10-2009 05:53 » 

zubr, знаешь какие-нибудь ссылки на материал по использованию метода Protect? Желательно с кодами на Delphi. Я тут погуглила, но примеры только на VB нашла.
Буду очень признательна..    Улыбаюсь
Записан
Aguilina
Интересующийся

kz
Offline Offline
Пол: Женский

« Ответ #31 : 06-10-2009 06:06 » 

sss
Запускаю экзэшник и пока он работает, открываю через проводник любые файлы Excel(повторяю действия пользователя). И экзэшник ломается.  Да-да
Потом использовала код, который х77 предложил, после этого хоть 7 файлов открываю - экзешник не ломается, отчет формируется.
Но теперь нужно поставить защиту на отчет во время формирования, т.к. сразу после запуска экзешника открывается Excel файл и начинается запись. И все это пользователь видит и может помешать процессу формирования.
« Последнее редактирование: 06-10-2009 06:10 от Aguilina » Записан
sss
Специалист

ru
Offline Offline

« Ответ #32 : 06-10-2009 06:48 » new

Aguilina, так ломается твоя exe! А в каком месте? Покажи код...  И какой код ошибки?
Записан

while (8==8)
Aguilina
Интересующийся

kz
Offline Offline
Пол: Женский

« Ответ #33 : 06-10-2009 09:11 » 

Aguilina, так ломается твоя exe! А в каком месте? Покажи код...  И какой код ошибки?

Когда делаю Excel.Visible := FALSE;  когда открываю через проводник другие эксель файлы при формировании, то отчет ломается. Выходит ошибка OLE error 800AC472(ошибка о занятости приложения). На сам код не ругается. Программа рабочая. Просто есть некоторые неудобства с Excel для пользователей.
А когда делаю Excel.Visible := TRUE; отчет формируется, Но при открытом эксель файле. Его нужно скрыть или защитить от изменений со стороны пользователя.  Улыбаюсь







« Последнее редактирование: 06-10-2009 09:18 от Aguilina » Записан
zubr
Гость
« Ответ #34 : 06-10-2009 09:20 » 

Вот несколько вариантов решения:
1.
Код:
    ExcelApp.Visible := False; //до вывода
    ExcelApp.Visible := True; //после вывода
Проверено, работатет, никакие процессы запущенные пользователем не мешают.
2.
Код:
   //до вывода
    WorkBook.WorkSheets[1].EnableSelection := $FFFFEFD2;
    WorkBook.WorkSheets[1].Protect('123', False, True, True, True);
   //после вывода
   WorkBook.WorkSheets[1].EnableSelection := 0;
   WorkBook.WorkSheets[1].UnProtect('123');
3.
Код:
  //до вывода
   WorkBook.WorkSheets[1].Visible := $00000002;
   //после вывода
   WorkBook.WorkSheets[1].Visible := $FFFFFFFF;
4. Вывод делать в вариантный массив, а затем загружать массив целиком, загрузка почти мгновенная:
Код:
  ArrayData := VarArrayCreate([1, RowCount, 1, ColCount], varVariant);
  // Заполняем массив
  for I := 1 to RowCount do
  for J := 1 to ColCount do
  ArrayData[I, J] := J * 10 + I;
  // Левая верхняя ячейка области, в которую будем выводить данные
  Cell1 := WorkBook.WorkSheets[1].Cells[BeginRow, BeginCol];
  // Правая нижняя ячейка области, в которую будем выводить данные
  Cell2 := WorkBook.WorkSheets[1].Cells[BeginRow  + RowCount - 1, BeginCol +
  ColCount - 1];
  // Область, в которую будем выводить данные
  Range := WorkBook.WorkSheets[1].Range[Cell1, Cell2];
  //Вывод
  Range.Value := ArrayData;
Записан
Aguilina
Интересующийся

kz
Offline Offline
Пол: Женский

« Ответ #35 : 06-10-2009 11:56 » 

2 zubr
Класс!!! Большое спасибо. Я выбрала 2-й метод. Все работает.  Класс!
Записан
Страниц: 1 [2]  Все   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines