Если длина строки > 256 символов — в ячейке отображается ######, если длина строки > 920 символов, то при записи в диапазон возникает ошибка OLE error
enlarger := 1;
Excel:=CreateOleObject('Excel.Application');
Excel.Application.EnableEvents := false;
try
Excel.SheetsInNewWorkBook:=1;
WorkBook:=Excel.WorkBooks.Add;
WorkSheet:=WorkBook.WorkSheets[1];
tmpQuery:=TQuery.Create(self);
with tmpQuery do begin
Close;
SQL.Clear;
SQL.Add('текст запроса');
Open;
First;
while not EOF do begin
Range := WorkSheet.Range[WorkSheet.Cells[RecNo+enlarger, 1], WorkSheet.Cells[RecNo+enlarger, 10]];
Range.NumberFormat := '@';
Range.Value := Массив VarArray
next;
end;
end;
finally
Excel.Visible:=true;
Excel:=UnAssigned;
end;
Ошибка возникает на 2003 и 2010 Excel'е, на 2007 ошибка не возникает, но ###### так же присутствуют.
Если занчение присваивать не диапазону, а ячейке — все происходит точно так же.
Как обойти это ограничение?
Здравствуйте, molinero, Вы писали:
M>Если длина строки > 256 символов — в ячейке отображается ######, если длина строки > 920 символов, то при записи в диапазон возникает ошибка OLE error
Вы пытаетесь работать с Excel через Sql?
TQuery это что?
Здравствуйте, BlackEric, Вы писали:
BE>Здравствуйте, molinero, Вы писали:
M>>Если длина строки > 256 символов — в ячейке отображается ######, если длина строки > 920 символов, то при записи в диапазон возникает ошибка OLE error
BE>Вы пытаетесь работать с Excel через Sql? BE>TQuery это что?
Также покажите строку подключение, текст запроса и
что это Range.Value := Массив VarArray ?
Здравствуйте, BlackEric, Вы писали:
BE>Здравствуйте, molinero, Вы писали:
M>>Если длина строки > 256 символов — в ячейке отображается ######, если длина строки > 920 символов, то при записи в диапазон возникает ошибка OLE error
BE>Вы пытаетесь работать с Excel через Sql? BE>TQuery это что?
Нет... Создаю запрос к таблице и выбираю данные.
tmpQuery:=TQuery.Create(self);
with tmpQuery do begin
Close;
SQL.Clear;
SQL.Add('текст запроса'); //Абсолютно не важнен, в данном случае, текст запроса
Open;
Прохожу по всем строкам из выборки и присваиваю диапазону Excel массив значений
while not EOF do begin
Range := WorkSheet.Range[WorkSheet.Cells[RecNo+enlarger, 1], WorkSheet.Cells[RecNo+enlarger, 10]];
Range.NumberFormat := '@';
Range.Value := Массив VarArray //массив создается функцией VarArrayCreate()
next;
end;
end;
Все нормално до тех пор, пока длина текста в одной из ячеек не станет больше 920 символов, причем на всех компьютерах происходит по разному. 2007 офис вин7-32 переваривает нормально, сервер2008р2 2003 офис и вин7-64 2010 офис наталкивается на это препятствие.
Здравствуйте, BlackEric, Вы писали:
BE>Здравствуйте, BlackEric, Вы писали:
BE>>Здравствуйте, molinero, Вы писали:
M>>>Если длина строки > 256 символов — в ячейке отображается ######, если длина строки > 920 символов, то при записи в диапазон возникает ошибка OLE error
BE>>Вы пытаетесь работать с Excel через Sql? BE>>TQuery это что?
BE>Также покажите строку подключение, текст запроса и BE>что это Range.Value := Массив VarArray ?
BE>В какой строке ошибка возникает?
Это функция которая возвращает вариантный массив.
function TfMakeReport.LineOfReport(TimeStart, TimeStop, Organization, WorkPlace, Count, CountHours, ClientK, OrganizationK, Task: Variant): Variant;
var Line: Variant; i: integer;s: string;
begin
Line := VarArrayCreate([0, 9], varVariant);
Line[0] := FormatDateTime('dd.mm.yyyy hh:mm', TimeStart);
Line[1] := FormatDateTime('t', TimeStart);
Line[2] := FormatDateTime('t', TimeStop);
Line[3] := Organization;
Line[4] := WorkPlace;
Line[5] := String(Count); //в этих строках без приведения к типу ни чего не изменяется
Line[6] := String(CountHours); //в этих строках без приведения к типу ни чего не изменяется
Line[7] := String(ClientK); //в этих строках без приведения к типу ни чего не изменяется
Line[8] := String(OrganizationK);//в этих строках без приведения к типу ни чего не изменяется
Line[9] := Task; //Ошибка происходит если длина текста в этой переменной > 920. Если меньше ошибки не возникает.
Result := Line;
end;