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

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: проблемы после экспорта в эксель  (Прочитано 5556 раз)
0 Пользователей и 1 Гость смотрят эту тему.
BlackStorm
Гость
« : 06-04-2005 08:18 » 

у меня есть така процедура:


Код:

procedure TfmMain.SaveButtonClick(Sender: TObject);
var
  exsel: OleVariant;
  WorkBook, Sheet: Variant;
  fileName: String;
  ffield,fvalue,cmd: string;
  npp,str:integer;
begin

  try
    //Получаем имя шаблона Excel-файла
    fileName:= ExtractFilePath(Application.EXEName)+'Sample.xls';
    //Создаем объект интерфейса для доступа к серверу COM
    exsel := CreateOleObject('Excel.Application');
    //Создаем книгу и обращаемся к первому листу
    WorkBook := exsel.Workbooks.Add(fileName);
    Sheet := WorkBook.WorkSheets[1];
    npp:=1;
    str:=17;
    cmd:='';
      SaveDialog1.FileName:= 'КП '+ MEN.Text;
      if SaveDialog1.Execute then
       begin
       
        ADO_KP.First;

        while not ADO_KP.Eof do
         begin       // начало  фор
          Sheet.Cells(str,2) := IntToStr(npp);
          npp := npp + 1;
          Sheet.Cells(str,3) := ADO_KP.FieldByName('IZDELIE').AsString;
          Sheet.Cells[str,3].HorizontalAlignment := -4131;
          Sheet.Cells(str,4) := ADO_KP.FieldByName('KOLVO').AsString;
          Sheet.Cells(str,5) := ADO_KP.FieldByName('COST').AsString;
          ffield:='=Sum(D'+IntToStr(str)+'*E'+IntToStr(str)+')';
          Sheet.Cells[str,6].Formula := ffield;
          Sheet.Cells(str,7) := ADO_KP.FieldByName('SKIDKA').AsString;
          fvalue:='=F'+IntToStr(str)+'-G'+IntToStr(str)+'/100*F'+IntToStr(str);
          Sheet.Cells[str,8].Formula := fvalue;
          ADO_KP.Next;
          str:=str+1;
         end;        // конец   фор
         cmd:='B17:H'+IntToStr(str);
         ffield:='=Sum(D17:D'+IntToStr(str-1)+')';
         Sheet.Cells[str,4].Formula :=  ffield;
         ffield:='=Sum(f17:f'+IntToStr(str-1)+')';
         Sheet.Cells[str,6].Formula :=  ffield;
         Sheet.Cells(str,7) :=  'Итого';
         ffield:='=Sum(h17:h'+IntToStr(str-1)+')';
         Sheet.Cells[str,8].Formula :=  ffield;
         Sheet.Cells(13,5) := 'Менеджер: ' + ComboBox1.Text   ;
         Sheet.Cells(13,3) := 'Предложение № ' + MEN.Text   ;
         Sheet.Cells[13,3].Font.Bold := True;
         Sheet.Cells[str,1].HorizontalAlignment := -4131;
         exsel.Range[cmd].Borders.Weight := 3;
         str:=str+2;
         Sheet.Cells(str,1) := 'Срок действия КП - 20 дней.';
         Sheet.Cells[str,1].HorizontalAlignment := -4131;
         str:=str+1;
         Sheet.Cells(str,1) := 'Срок поставки  - 5 рабочих дней с момента оплаты (самовывоз из г Рязани)'   ;
         Sheet.Cells[str,1].HorizontalAlignment := -4131;
         str:=str+1;
         Sheet.Cells(str,3) := ' 7 рабочих дней с момента оплаты (самовывоз из г Москвы)'              ;
         Sheet.Cells[str,3].HorizontalAlignment := -4131;
         str:=str+1;
         Sheet.Cells(str,1) := 'Гарантийный срок - 3 года с момента отгрузки.'     ;
         Sheet.Cells[str,1].HorizontalAlignment := -4131;
         str:=str+1;
         Sheet.Cells(str,1) := 'Все цены приведены в USD.'      ;
         Sheet.Cells[str,1].HorizontalAlignment := -4131;
         str:=str+1;
         Sheet.Cells(str,1) := 'Все цены с НДС.'       ;
         Sheet.Cells[str,1].HorizontalAlignment := -4131;
         str:=str+1;
         
         exsel.Application.ActiveWorkBook.Saveas(SaveDialog1.FileName);

       end;
       exsel.Application.Quit;
  finally
     exsel.Application.Quit;
  end; // try..finally

end;

если кроме программы где выполняется эта процедура были за пущены другие копии excel я то они как бы подвисают. Мож кто с этим сталкивался.
подскажите что нибудь.
« Последнее редактирование: 03-12-2007 18:56 от Алексей1153++ » Записан
Sacha
Гость
« Ответ #1 : 18-05-2005 18:51 » new

Я бы посоветовал пойти таким путем:
Код:
const
  ExLCID = 0;
...
      ExcelApp:=TExcelApplication.Create(nil);
      ExcelApp.ConnectKind:=ckNewInstance;
      ...
      ExcelApp.Connect;
      ExcelApp.Visible[ExLCID]:=False; // лучьше его спрятать на момент выполнения операций
      ...
      // Творим что хотим
      ...
      ExcelApp.Visible[ExLCID]:=True;
      ...
...
получаем всегда "свой" экземпляр приложения, которое не привязано к другим Экселям.
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines