Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.05.28;
Скачать: CL | DM;

Вниз

Экспорт данных в Excel   Найти похожие ветки 

 
Dyusha ©   (2006-03-28 12:15) [0]

Добрый День Уважаемые Мастера!!! При помощи следующего кода эспортирую записи в Excel, но появляется следующая ошибка: "OLE error 800A03EC". в чем может быть проблема, с другими таблицами из этой же базы все проходит нормально.

var
 XL, XArr: Variant;
 i: Integer;
 j: Integer;
begin
 XArr := VarArrayCreate([1, ADOQuery2.FieldCount], varVariant);
 XL := CreateOLEObject("Excel.Application");
 XL.WorkBooks.add;
 XL.visible := true;
 XL.Workbooks[1].Worksheets[1].Name:=SeSkinLabel2.caption;
 j := 1;
 ADOQuery2.First;
 while not ADOQuery2.Eof do
 begin
   i := 1;
   while i <= ADOQuery2.FieldCount do
   begin
     XArr[i] := ADOQuery2.Fields[i - 1].Value;
     i := i + 1;
   end;
   XL.Range["A" + IntToStr(j),
     CHR(64 + ADOQuery2.FieldCount) + IntToStr(j)].Value := XArr;
   ADOQuery2.Next;
   j := j + 1;
 end;
 XL.Range["A1", CHR(64 + ADOQuery2.FieldCount) + IntToStr(j)].select;
  XL.Selection.Font.Name := "Arial";
 XL.Selection.Font.Size := 10;
 XL.selection.Columns.AutoFit;
 XL.Range["A1", "A1"].select;

Спасибо большое за любую оказанную помощь.


 
_RusLAN ©   (2006-03-28 13:12) [1]

http://www.delphikingdom.com/asp/viewitem.asp?catalogid=920


 
sniknik ©   (2006-03-28 13:14) [2]

This error is referenced in Knowledge Base article Q191974 and occurs because a single quote is in the expression or header for a field. The preceding error was generated because I missed a quote in the expression. If you need to output a single quote in an expression, then use two backslashes to prefix the quote. For instance, you may need to create an expression like Name"s with a quote in it. To accomplish this you must use this syntax: ....

http://www.microsoft.com/mind/0799/beyond/beyond0799.asp


 
Dyusha ©   (2006-03-28 13:51) [3]

Наверное это связано со столбцами содержащими даты :-(
Они у меня туда попадают при помощи DateTimePicker


 
Dyusha ©   (2006-03-28 14:19) [4]

Я только вот не могу понять тут загвоздка в хранящихся данных или в форматах столбцов. Использую Office 2003


 
_RusLAN ©   (2006-03-29 13:14) [5]

Попробуйте присваивать не всю строку зараз
а отдельно каждое поле
и посмотрите на каком будет ошибка
так будет легче определить отчего она берется.


 
Dyusha ©   (2006-03-31 07:35) [6]

Вот еще один вариант, делаю вот так:

var
XL, R, XArr: Variant;
i: Integer;
j: Integer;
begin
XL := CreateOLEObject("Excel.Application");
XL.WorkBooks.add;
XL.visible := true;
XL.Workbooks[1].Worksheets[1].Name:=SeSkinLabel2.caption;
j := 1;
ADOQuery2.First;
XArr := VarArrayCreate([1, ADOQuery2.FieldCount, 1, ADOQuery2.RecordCount], varVariant);
j := 1; // заполним весь массив скопом
while not ADOQuery2.Eof do
begin
 for i := 1 to ADOQuery2.FieldCount do
*********************************************
вот в этом месте VARIANT ARRAY INDEX OUT OF BOUNDS
   XArr[j, i] := ADOQuery2.Fields[i - 1].Value;// // Выходим за значение массива
 Inc(j);
 ADOQuery2.Next;
*********************************************
end;
R := XL.ActiveSheet.Range["A1", CHR(64 + ADOQuery2.FieldCount) +
 IntToStr(ADOQuery2.RecordCount)];
R.Value := XArr;
R.Font.Name := "Arial";
R.Font.Size := 10;
R.Columns.AutoFit;

В чем может быть проблема?


 
sniknik ©   (2006-03-31 08:08) [7]

поля с нуля считаются.


 
sniknik ©   (2006-03-31 08:10) [8]

помедитируй над строкой
> for i := 1 to ADOQuery2.FieldCount do
;о))


 
Dyusha ©   (2006-03-31 12:19) [9]

"List index out of bounds (-1)"

;-(


 
sniknik ©   (2006-03-31 12:55) [10]

хотя нет, не то, а это я тоже пропустил... ;)

XArr := VarArrayCreate([1, ADOQuery2.FieldCount, 1, ADOQuery2.RecordCount], varVariant);
(первым поля, вторым записи)
for i := 1 to ADOQuery2.FieldCount do
 XArr[j, i] := ADOQuery2.Fields[i - 1].Value;// // Выходим за значение массива
(первым записи, вторым поля)

поменяй местами, так XArr[i, j]


 
sniknik ©   (2006-03-31 13:01) [11]

и кстати вся эта морока с массивами нафиг не нужна!
вместо
 R := XL.ActiveSheet.Range["A1", CHR(64 + ADOQuery2.FieldCount) + IntToStr(ADOQuery2.RecordCount)];
 R.Value := XArr;
делаеш
XL.ActiveSheet.Range["A1"].CopyFromRecordset(ADOQuery2.Recordset);
и все
а все, что связано с передачей в масив выкидываеш.


 
Dyusha ©   (2006-04-04 16:09) [12]

procedure FillSheet(Sheet: OleVariant; const TableName: String);
 var
   j, i: Integer;
   XArr: OleVariant;
 begin
  // + 1 &#228;&#235;&#255; &#231;&#224;&#227;&#238;&#235;&#238;&#226;&#234;&#224; - &#232;&#236;&#229;&#237; &#239;&#238;&#235;&#229;&#233;
   XArr := VarArrayCreate([1, ADOQuery2.RecordCount + 1, 1, ADOQuery2.FieldCount], varVariant);
   for i := 0 to ADOQuery2.FieldCount - 1 do
     XArr[1, i + 1] := ADOQuery2.Fields[i].FieldName;
  j := 2; // &#231;&#224;&#239;&#238;&#235;&#237;&#232;&#236; &#226;&#229;&#241;&#252; &#236;&#224;&#241;&#241;&#232;&#226; &#241;&#234;&#238;&#239;&#238;&#236;
   while not ADOQuery2.Eof do begin
      for i := 1 to ADOQuery2.FieldCount do
        if ADOQuery2.Fields[i - 1].DataType in [ftString, ftWideString, ftMemo]
          then XArr[j, i] := #39 + ADOQuery2.Fields[i - 1].AsString
          else XArr[j, i] := ADOQuery2.Fields[i - 1].Value;
      Inc(j);
      ADOQuery2.Next;
    end;
   R := Sheet.Range["A1", Sheet.Cells.Item[ADOQuery2.RecordCount + 1, ADOQuery2.FieldCount]];
   R.Formula := XArr;
   R.Font.Name := "Arial";
   R.Font.Size := 12;
   R.Columns.AutoFit;
   XArr := Unassigned;
   end;
begin
 XL := CreateOleObject("Excel.Application");
 if VarIsEmpty(XL) then Exit; // &#226;&#224;&#249;&#229; &#237;&#229;&#242; XL"&#255;!

 WorkBook := XL.Application.WorkBooks.Add;
 ASheet := WorkBook.WorkSheets[1];
 XL.Workbooks[1].Worksheets[1].Name:=SeSkinLabel2.caption;
 try
   XL.Visible := True;
   FillSheet(ASheet, "NEW_FIZ_DOC");
   if WorkBook.Sheets.Count < 2
     then ASheet := WorkBook.Sheets.Add
     else ASheet := WorkBook.Sheets[2];
  finally
  ASheet := Unassigned;
   WorkBook := Unassigned;
   XL := Unassigned;
  end;

Вот так все работает чики-чики. Спасибо Shablya Alexander



Страницы: 1 вся ветка

Текущий архив: 2006.05.28;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.025 c
2-1147112831
Firefly
2006-05-08 22:27
2006.05.28
Тестирование


2-1147460349
News
2006-05-12 22:59
2006.05.28
Объекты


1-1145362116
Дмитрий_177
2006-04-18 16:08
2006.05.28
Цветная панель


15-1146599729
SergP
2006-05-02 23:55
2006.05.28
asm


1-1145425737
K_VAL
2006-04-19 09:48
2006.05.28
Восстановить иконку проекта