![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
OLE Error [D6, WinXP]
Dennis S © (2009-01-23 10:52:00)При работе со строками, программа выдаёт ошибку "OLE error 800A03EC".
Что это значит? В чём проблема?
Кол-во строк при получении сообщения об ошибке: 2819.
При кол-ве строк менее 2000 такого не происходит.
Что это?
Dennis S (2009-01-27 00:20:00) [1]Всё, нашёл в чём фишка!!! :))
В одной из строк из-за смещения данных в "источнике", при экспорте в Excel в одной из ячеек таблицы получается нечто, похожее на "=45" на это Excel и ругается!!!
Кстати, как обработать эту ошибку и вывести сообщение типа "Смещение данных в ячейке 'Х', информация будет заменена на 'ХХХ'!" и продолжить процесс?
Dennis S (2009-01-27 00:07:00) [2]Будешь тут ССЗБ... :(
то, что ты докопался до "n", "i" - это конечно правильно, код ещё пока кривой...
но обозначенная мною трабла не в этом...
сейчас кое-что нашёл по этой ошибке в сети - пытаюсь разобраться сам.
Сергей М. (2009-01-26 19:03:00) [3]procedure TForm1.toEXCEL1Click(Sender: TObject);
begin
..
n := n + 1; // Чемуравно n?!!!!
Сергей М. (2009-01-26 19:01:00) [4]
> статические они, потому что используются ещё другой процедурой.
Одновременно с этойчто ли ?
Ну тогда ты ССЗБ.
Dennis S (2009-01-26 18:16:00) [5]mmX2.Lines.Count = 2819 (естественно, не меняется во время цикла)
а статические они, потому что используются ещё другой процедурой.
Сергей М. (2009-01-26 16:35:00) [6]
> а n равна 2671
Чему при этом равно mmX2.Lines.Count ?
И еще раз - почемупеременные i и n у тебя статические, а не локальные ?
Dennis S (2009-01-26 16:00:00) [7]Может кто-нибудь всё-таки знает, в чём ошибка....?
Dennis S (2009-01-23 17:54:00) [8]2 Сергей М. ©
...в этот момент i равна 463...
а n равна 2671.
попробовал другой массив пропустить - проходит нормально...
хотя кол-во строк больше: 3746
на финише: i = 3746, n = 19232
а первый не идёт и всё тут...
2 Плохиш ©
я не понимаю какая ошибка, что она значит и что нужно править...
Плохиш (2009-01-23 14:22:00) [9]
> Хотелось бы в общих чертах понять о чём речь...
я это писал?
> кроме указанного тобой кода, в сообщении есть конкретная
> ошибка, возвращаемая екселем....
Сергей М. (2009-01-23 13:55:00) [10]А n в этот момент чему равна ?
И почему переменные i и n у тебя статические, а не локальные ?
Dennis S (2009-01-23 13:49:00) [11]2 Сергей М. ©
строк в memo, которые потом и обрабатываются в TForm1.toEXCEL1Click
при сборке и работе из Delphi выскакивает Debugger Exception Notification с выделением этой стоки в коде.
в этот момент i равна 463.
Сергей М. (2009-01-23 13:23:00) [12]
> Кол-во строк при получении сообщения об ошибке: 2819.
Строк каких- тех что в Мемо или тех что ты заполняешь на раб.листе ?
Каким образом ты определил, что именно на этой строчке "прерывается" ?
И чему в этот момент равна i ?
Dennis S (2009-01-23 13:10:00) [13]2 Сергей М. ©
Прерывается на:
Excel.ActiveWorkBook.WorkSheets[1].Cells[i+1,6] := COPY(S,3,(length(S)-2));
2 Плохиш ©
Спасибо, конечно, но я в немецком "0"...
Поэтому, как говорил один из кино-героев: "Хотелось бы в общих чертах понять о чём речь..."
Предполагаю, что ключ есть в посте "Andreas Kosch", но в чём фишка не понимаю...
Плохиш (2009-01-23 12:34:00) [14]
> Dennis S (23.01.09 10:52)
>
>
Я вот твою ошибку в гуглю скопировал, просто слова между ковычками и он мне выдал
Ergebnisse 1 - 10 von ungefähr 881für OLE error 800A03EC. (0,15 Sekunden)
Не так уж и много страниц.
и первая ссылка http://entwickler-forum.de/showthread.php?t=17274
в которой подробно расписано, что кроме указанного тобой кода, в сообщении есть конкретная ошибка, возвращаемая екселем....
Сергей М. (2009-01-23 11:42:00) [15]Выполнение какой конкретно строчки вызывает это исключение ?
Dennis S (2009-01-23 10:56:00) [16]Ошибка при обработке:
procedure TForm1.toEXCEL1Click(Sender: TObject);
begin
panX.Color := clYellow;
mmX.Enabled := False;
mmX2.Enabled := False;
Excel := CreateOleObject('Excel.Application.9');
Excel.Workbooks.Add;
Excel.ActiveWorkBook.WorkSheets[1].Cells[1,1] := 'Шифр заказа';
Excel.ActiveWorkBook.WorkSheets[1].Cells[1,2] := 'Код';
Excel.ActiveWorkBook.WorkSheets[1].Cells[1,3] := 'Наименование';
Excel.ActiveWorkBook.WorkSheets[1].Cells[1,4] := 'Ед.';
Excel.ActiveWorkBook.WorkSheets[1].Cells[1,5] := 'Кол-во';
Excel.ActiveWorkBook.WorkSheets[1].Cells[1,6] := 'Доп.инфо';
Excel.ActiveWorkBook.WorkSheets[1].Range['A1:F1'].Select;
Excel.Selection.Font.Name := 'Tahoma';
Excel.Selection.Font.Size := 9;
Excel.Selection.Font.Bold := True;
Excel.Selection.Interior.ColorIndex := 6;
For i := 1 to mmX2.Lines.Count do begin
pBAR2.Position := i * 100 div (mmX2.Lines.Count-1);
n := n + 1;
Excel.ActiveWorkBook.WorkSheets[1].Cells[i+1,1] := lbNAME.Caption;
S := mmX2.Lines.Strings[n-1];
Excel.ActiveWorkBook.WorkSheets[1].Cells[i+1,2] := S;
S := mmX2.Lines.Strings[n];
Excel.ActiveWorkBook.WorkSheets[1].Cells[i+1,3] := S;
S := mmX2.Lines.Strings[n+1];
Excel.ActiveWorkBook.WorkSheets[1].Cells[i+1,4] := S;
S := mmX2.Lines.Strings[n+2];
Excel.ActiveWorkBook.WorkSheets[1].Cells[i+1,5] := S;
S := mmX2.Lines.Strings[n+3];
Excel.ActiveWorkBook.WorkSheets[1].Cells[i+1,6] := COPY(S,3,(length(S)-2));
if S = '' then n := n + 4 else n := n + 5;
Application.ProcessMessages;
end;
Excel.ActiveSheet.PageSetup.Orientation := 2;
Excel.Visible := True;
panX.Color := clBtnFace;
mmX.Enabled := True;
mmX2.Enabled := True;
end;