Конференция "Corba" » Ошибка OLE Error 800A03EC [D7, MSSQL]
 
  • fluxion © (28.04.08 01:49) [0]
    Здравствуйте!
    Делаю экспорт в Excel след. образом:
    procedure TForm.BitBtn6Click(Sender: TObject);
    var
    XL, XArr: Variant;
    i: Integer;
    j: Integer;
    begin
    XArr:=VarArrayCreate([1,DM.ADOQuery1.FieldCount],varVariant);
    XL:=CreateOLEObject('Excel.Application');     // Создание OLE объекта
    XL.WorkBooks.add;
    XL.visible:=true;

    j := 1;
    DM.ADOQuery1.First;
    while not DM.ADOQuery1.Eof do
     begin
      i:=1;
      while i<=DM.ADOQuery1.FieldCount do
       begin
        XArr[i] := DM.ADOQuery1.Fields[i-1].Value;
        i := i+1;
       end;
      XL.Range['A'+IntToStr(j),CHR(64+DM.ADOQuery1.FieldCount)+IntToStr(j)].Value := XArr;
      DM.ADOQuery1.Next;
      j:=j+1;
     end;
    XL.Range['A1',CHR(64+DM.ADOQuery1.FieldCount)+IntToStr(j)].select;

    XL.Selection.Font.Name:='Arial';
    XL.Selection.Font.Size:=10;
    XL.selection.Columns.AutoFit;
    XL.Selection.HorizontalAlignment:=2;
    XL.Selection.Borders.LineStyle:=2;
    end;



    В таблице формирую 25 полей. При нажатии кнопки открывается Excel и вылетает ошибка OLE Error 800A03EC и показывает ошибку на строке:
    XL.Range['A1',CHR(64+DM.ADOQuery1.FieldCount)+IntToStr(j)].select;


    Если формирую 24 поля и меньше, то проходит все нормально. Подскажите в чем проблема.
  • Ega23 © (28.04.08 09:39) [1]
    А сколько в английском языке букаф?  :)
  • Сергей М. © (28.04.08 10:04) [2]
    Для обращения к диазону ячеек рабочего листа вовсе не обязательны все эти прыжки с бубном вокруг имен строк и колонок.

    with XL do
     Range[Cells[left, top], Cells[right, bottom]].Select

    где left, top, right, bottom - целочисленные индексы колонок и строк верхней левой и нижней правой ячеет диапазона
  • Anatoly Podgoretsky © (28.04.08 10:35) [3]
    > Ega23  (28.04.2008 09:39:01)  [1]

    К сожалению мало.
  • sniknik © (28.04.08 11:10) [4]
    > вовсе не обязательны все эти прыжки с бубном вокруг имен строк и колонок.
    также как необязательны и вариантные массивы, циклы и остальное. для экспорта. у ячейки есть метод LoadFromRecordset... к range же следует обращается только для настройки формата отображения, но не копирования самих данных.
  • fluxion © (29.04.08 00:55) [5]
    Спасибо, разобрался.  CHR(64) диапазона мало было..)
  • Bless © (30.04.08 09:01) [6]

    > у ячейки есть метод LoadFromRecordset... к range же следует
    > обращается только для настройки формата отображения, но
    > не копирования самих данных.


    Что-то мне не удалось найти такого метода у объектов Excel-я. Он точно так называется?
  • alx512 (24.11.08 17:40) [7]
    Тоже искал LoadFromRecordset, метод на самом деле называется CopyFromRecordset и работает с DAO. Есть еще QueryTable для OLEDB и ODBC.
  • AlexF (30.12.08 19:04) [8]

    var
       ExcelApp, Workbook, Range, Cell1, Cell2, ArrayData  : Variant;
       TemplateFile : String;
       BeginCol, BeginRow, i, j : integer;
       RowCount, ColCount : integer;
    begin
     // Координаты левого верхнего угла области, в которую будем выводить данные
     BeginCol := 1;
     BeginRow := 5;

     // Размеры выводимого массива данных
     RowCount := 100;
     ColCount := 50;

     // Создание Excel
     ExcelApp := CreateOleObject('Excel.Application');

     // Отключаем реакцию Excel на события, чтобы ускорить вывод информации
     ExcelApp.Application.EnableEvents := false;

     //  Создаем Книгу (Workbook)
     //  Если заполняем шаблон, то Workbook := ExcelApp.WorkBooks.Add('C:\MyTemplate.xls');
     Workbook := ExcelApp.WorkBooks.Add;

     // Создаем Вариантный Массив, который заполним выходными данными
     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;

     // Делаем Excel видимым
     ExcelApp.Visible := true;


  • Сергей (31.10.10 03:49) [9]
    Помогите пожалуйста.
    В программе
    http://narod.ru/disk/26785708000/Avon косметика.rar.html
    при открытии общего файла в EXCEL выдает ошибку OLE error 800A03EC.
    Пытался связаться с разработчиком, но по тел. он не отвечает, а ссылка на его сайт не рабочая.
    Если кто разбирается, помогите решить эту проблему.
    БОЛЬШОЕ СПАСИБО.
    e-mail: sergeymk@yandex.ru
 
Конференция "Corba" » Ошибка OLE Error 800A03EC [D7, MSSQL]
Есть новые Нет новых   [118622   +8][b:0][p:0.002]