Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2006.05.28;
Скачать: [xml.tar.bz2];

Вниз

Экспорт данных в 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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.48 MB
Время: 0.01 c
1-1144999513
_RusLAN
2006-04-14 11:25
2006.05.28
Exception. Изменение сообщения ошибки.


15-1145961309
Manic Mechanic
2006-04-25 14:35
2006.05.28
Сходил таки на керлинг, как приглашали


8-1135718806
woto
2005-12-28 00:26
2006.05.28
Для тех кто работал с graphics32


2-1147403077
manevil
2006-05-12 07:04
2006.05.28
Копирование


8-1135585258
Chaser
2005-12-26 11:20
2006.05.28
Как сделать снимок с экрана с курсором мыши?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский