Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Excel и Windows 2000 [Delphi, Windows]


Grain ©   (2006-12-15 06:13:00) 

Добрый день, У меня такая проблем, дело в том, что я написала программу, которая выводит данные в Excel. Писала я на Delphi 7 и у меня стоит Windows XP. Когда я поставила программу на компьютер с Windows 2000, то данные в Excel перестали выводиться. Пробовала открыть его, а потом запустить программу, тогда выводится иногда одна сторока. Для открытия Excel я использую обработчик прерывания try, я так думаю, что на Windows 2000 плохо обрабатываются прерывания или они просто не успевают обрабатываться вообще. У нас еще одна программа, и там такая же проблема с try. Может кто сталкивался с таким, подскажите, что делать? Спасибо.


umbra   (2006-12-18 12:46:00) [1]

это связано с тем, что на сбоящей машине разделителем десятичных разрядов была не точка. Формат числовых ячеек лучше назначать кодом наподобие

sh.range['l'+inttostr(i)+':l'+inttostr(i)].NumberFormatLocal :='# ##0' + DecimalSeparator + '00';


Grain   (2006-12-18 08:02:00) [2]

Я нашла ошибку, проблема была вот в этой строке:

sh.range['l'+inttostr(i)+':l'+inttostr(i)].NumberFormat:='# ##0.00';

Дело в том, что когда я пыталась установить формат ячейке на Windows 2000 это почему-то не проходило, а у меня проходило, ошибка вылезла после того как я убрала try. Убрав эту строку у меня все заработало.


Grain   (2006-12-18 05:25:00) [3]

Вот моя процедура:
procedure TFExcel.BitBtn1Click(Sender: TObject);
var
SH: Variant;
i,j:integer;
begin
 try
  XL:=GetActiveOleObject('Excel.Application');
 except
  XL:=CreateOleObject('Excel.Application');
 end;
 try
  XL.WorkBooks.add;

  sh:=XL.ActiveWorkBook.Sheets[1];
  sh.rows[1].font.color:=clBlack;
  sh.rows[1].font.size:=14;

  XL.Range['a1:a1'].select;
  Xl.selection.HorizontalAlignment:=-4108;
  Xl.selection.VerticalAlignment:=-4108;

  XL.Range['a5:m5'].select;
  Xl.selection.HorizontalAlignment:=-4108;
  Xl.selection.VerticalAlignment:=-4108;

  sh.rows[3].font.color:=clBlack;
  sh.rows[3].font.size:=12;
  sh.rows[4].font.color:=clBlack;
  sh.rows[4].font.size:=12;

  xl.range['a1:m4'].select;
  xl.selection.mergeCells:=true;
  sh.cells[1,1]:='База данных па период с '+datetostr(self.DateTimePicker1.Date)+' по '+datetostr(self.DateTimePicker2.Date);

  sh.rows[5].font.color:=clBlack;
  sh.rows[5].font.size:=10;
  sh.cells[5,1]:='Дата';
  sh.cells[5,2]:='Наименование резидента';
  sh.cells[5,3]:='Счет резидента';
  sh.cells[5,4]:='ИНН резидента';
  sh.cells[5,5]:='Наименование получ./плат.';
  sh.cells[5,6]:='ИНН получ./плат.';
  sh.cells[5,7]:='Наименование банка получ./плат.';
  sh.cells[5,8]:='БИК банка';
  sh.cells[5,9]:='Направление платежа';
  sh.cells[5,10]:='Код валютной операции';
  sh.cells[5,11]:='Паспорт сделки';
  sh.cells[5,12]:='Сумма сделки';
  sh.cells[5,13]:='Код валюты цены';

  i:=6;
  if self.CheckBox1.Checked then
  begin
    DM.TabRez.SetKey;
    DM.TabRez.FieldByName('Date').AsDateTime:=self.DateTimePicker1.Date;
    DM.TabRez.GotoNearest;
    if (DM.TabRez.FieldByName('Date').AsDateTime<=self.DateTimePicker2.DateTime) and
       (DM.TabRez.FieldByName('Date').AsDateTime>=self.DateTimePicker1.DateTime) then
      while ((DM.TabRez.FieldByName('Date').AsDateTime<=self.DateTimePicker2.DateTime) and not(DM.TabRez.Eof)) do
      begin
        sh.rows[i].font.size:=8;
        sh.cells[i,1]:=DM.TabRez.FieldByName('Date').AsString;
        sh.cells[i,2]:=DM.TabRez.FieldByName('namerez').AsString;
        sh.range['c'+inttostr(i)+':c'+inttostr(i)].NumberFormat:='@';
        sh.cells[i,3]:=DM.TabRez.FieldByName('chrez').AsString;
        sh.range['d'+inttostr(i)+':d'+inttostr(i)].NumberFormat:='@';
        sh.cells[i,4]:=DM.TabRez.FieldByName('innrez').AsString;
        sh.cells[i,5]:=DM.TabRez.FieldByName('namepol').AsString;
        sh.range['f'+inttostr(i)+':f'+inttostr(i)].NumberFormat:='@';
        sh.cells[i,6]:=DM.TabRez.FieldByName('innpol').AsString;
        sh.cells[i,7]:=DM.TabRez.FieldByName('nbpol').AsString;
        sh.cells[i,8]:=DM.TabRez.FieldByName('bikbpol').AsString;
        sh.cells[i,9]:=DM.TabRez.FieldByName('nplat').AsString;
        sh.cells[i,10]:=DM.TabRez.FieldByName('kodval').AsString;
        sh.cells[i,11]:=DM.TabRez.FieldByName('ps').AsString;
        sh.range['l'+inttostr(i)+':l'+inttostr(i)].NumberFormat:='# ##0.00';
        sh.cells[i,12]:=DM.TabRez.FieldByName('sum').AsString;
        sh.cells[i,13]:=DM.TabRez.FieldByName('kodcer').AsString;
        DM.TabRez.Next;
        inc(i);
      end;
  end
  else
  begin
    DM.TabRez.First;
    while not(DM.TabRez.Eof) do
    begin
      sh.rows[i].font.size:=8;
      sh.cells[i,1]:=DM.TabRez.FieldByName('Date').AsString;
      sh.cells[i,2]:=DM.TabRez.FieldByName('namerez').AsString;
      sh.range['c'+inttostr(i)+':c'+inttostr(i)].NumberFormat:='@';
      sh.cells[i,3]:=DM.TabRez.FieldByName('chrez').AsString;
      sh.range['d'+inttostr(i)+':d'+inttostr(i)].NumberFormat:='@';
      sh.cells[i,4]:=DM.TabRez.FieldByName('innrez').AsString;
      sh.cells[i,5]:=DM.TabRez.FieldByName('namepol').AsString;
      sh.range['f'+inttostr(i)+':f'+inttostr(i)].NumberFormat:='@';
      sh.cells[i,6]:=DM.TabRez.FieldByName('innpol').AsString;
      sh.cells[i,7]:=DM.TabRez.FieldByName('nbpol').AsString;
      sh.cells[i,8]:=DM.TabRez.FieldByName('bikbpol').AsString;
      sh.cells[i,9]:=DM.TabRez.FieldByName('nplat').AsString;
      sh.cells[i,10]:=DM.TabRez.FieldByName('kodval').AsString;
      sh.cells[i,11]:=DM.TabRez.FieldByName('ps').AsString;
      sh.range['l'+inttostr(i)+':l'+inttostr(i)].NumberFormat:='# ##0.00';
      sh.cells[i,12]:=DM.TabRez.FieldByName('sum').AsString;
      sh.cells[i,13]:=DM.TabRez.FieldByName('kodcer').AsString;
      DM.TabRez.Next;
      inc(i);
    end;
  end;

  j:=i-1;

  sh:=XL.sheets;
  sh.item[1].range['a5:m'+inttostr(j)].borders.linestyle:=1;
  sh.item[1].range['a5:m'+inttostr(j)].borders.colorindex:=1;
  sh.item[1].range['a5:m5'].interior.color:=clSilver;

  XL.Range['a5:a'+inttostr(j)].select;
  xl.selection.ColumnWidth:=10;
  XL.Range['b5:b'+inttostr(j)].select;
  xl.selection.ColumnWidth:=25;
  XL.Range['c5:c'+inttostr(j)].select;
  xl.selection.ColumnWidth:=20;
  XL.Range['d5:d'+inttostr(j)].select;
  xl.selection.ColumnWidth:=10;
  XL.Range['e5:e'+inttostr(j)].select;
  xl.selection.ColumnWidth:=25;
  XL.Range['f5:f'+inttostr(j)].select;
  xl.selection.ColumnWidth:=10;
  XL.Range['g5:g'+inttostr(j)].select;
  xl.selection.ColumnWidth:=10;
  XL.Range['h5:h'+inttostr(j)].select;
  xl.selection.ColumnWidth:=10;
  XL.Range['i5:i'+inttostr(j)].select;
  xl.selection.ColumnWidth:=5;
  XL.Range['j5:j'+inttostr(j)].select;
  xl.selection.ColumnWidth:=10;
  XL.Range['k5:k'+inttostr(j)].select;
  xl.selection.ColumnWidth:=15;
  XL.Range['l5:l'+inttostr(j)].select;
  xl.selection.ColumnWidth:=15;
  XL.Range['m5:m'+inttostr(j)].select;
  xl.selection.ColumnWidth:=15;

  XL.Range['a5:m'+inttostr(j)].select;
  xl.selection.WrapText:=true;

  XL.Range['a1:a1'].select;
  XL.Visible:=true;
 except
 end;
end;


umbra   (2006-12-15 11:54:00) [4]

неплохо бы увидеть, как вы данные в эксель выводите (код)


Grain   (2006-12-15 11:00:00) [5]

Версия Excel-я одна и та же стоит версия 2003. Отличие лишь в том, что у меня стоит Windows XP, а на той машине Windows 2000.


Array   (2006-12-15 10:04:00) [6]

А Вы дебагером проходились по коду, после чего он перестает выводиться, вполне возможно что стоит разная версия экселя


Наверх

Титульная страница Поиск, карта сайта Написать письмо