Ошибка формирования отчета в Excel
|
Предыдущая тема :: Следующая тема |
Автор |
Сообщение |
TannyGo Участник
Вступление в Клуб: 05.01.2018
|
Чт Ноя 15, 2018 18:20  Ошибка формирования отчета в Excel |
|
Полезность: Нет оценки
|
Добрый день,
При при выполнении операции (формировании отчета в Excel) выскакивает ошибка: 800a03ec.
Это происходит в том случае, если количество столбцов > 257. Если меньше - все нормально.
Версия Excel 2007.
В чем причина, кто-то может подсказать? |
|
 |
Blackmore64 Профи
Вступление в Клуб: 17.01.2017
|
Пт Ноя 16, 2018 08:25  Re: Ошибка формирования отчета в Excel |
|
Полезность: Нет оценки
|
TannyGo пишет: | При при выполнении операции (формировании отчета в Excel) выскакивает ошибка: 800a03ec.
Это происходит в том случае, если количество столбцов > 257. Если меньше - все нормально. Версия Excel 2007 |
Если используется шаблон, то возможно он версии 97-2003, у которого было такое ограничение. Попробуйте пересохранить его в формате 2007. |
|
 |
TannyGo Участник
Вступление в Клуб: 05.01.2018
|
Пт Ноя 16, 2018 09:39   |
|
Полезность: Нет оценки
|
В том-то и дело, что шаблон в данном случае не используется.
Новый файл открывается командой EXCEL.open_file(null,true,true).
Странно еще одно: в Excel-e ранних версий ограничение на количество столбцов - 256. В данном случае максимальное количество столбцов 257. Кстати, если в этом недоформированном файле попробовать сделать изменения вручную - все прекрасно добавляется. |
|
 |
TannyGo Участник
Вступление в Клуб: 05.01.2018
|
Пт Ноя 16, 2018 13:44   |
|
Полезность: Нет оценки
|
Сделала тестовую простейшую операцию, запись чисел в строку, чтобы проверить ограничение количества столбцов. Не проблема - все работает.
begin
if p_message = 'DEFAULT' then
EXCEL.init_xls;
EXCEL.open_file(null,true,true);
for i in 1..16000 loop
put(1, i, i);
end loop;
elsif p_message = 'VALIDATE' then
EXCEL.exec_script(V_DEST);
end if;
end;
Но как только в цикле добавляю форматирование ячейки:
put(1, i, i, 'CM'); -- соответственно увеличиваю V_DEST
опять та же ошибка и в таблице последнее число 257.
Может, что-то связано со строкой валидатора?
Кто-то может помочь, плз? |
|
 |
vtar Эксперт
Вступление в Клуб: 20.03.2009
|
Пт Ноя 16, 2018 13:50   |
|
Полезность: Нет оценки
|
На всякий случай (не уверен что поможет)
а в клиент скрипте есть очистка после выполнения ?
Execute DEST_STR.TEXT
DEST_STR.TEXT = "" |
|
 |
TannyGo Участник
Вступление в Клуб: 05.01.2018
|
Пт Ноя 16, 2018 15:11   |
|
Полезность: Нет оценки
|
Мой клиент-скрипт:
Public Function Main(LastControl)
if LastControl is Nothing then
Execute Dest.Text
Dest.Text = ""
end if
If LastControl is OK and Dest.Text <> "" Then
DO
Execute Dest.Text
Dest.Text = ""
Call Form1.ScriptServerValidate( OK, "OK")
Loop While Dest.Text <> ""
else
Execute Dest.Text
Dest.Text = ""
End If
Main = True
End Function
Как видно, есть))) |
|
 |
Blackmore64 Профи
Вступление в Клуб: 17.01.2017
|
Пн Ноя 19, 2018 08:20   |
|
Полезность: Нет оценки
|
Может попробовать переделать отчет в OOXML? Типа так
В проверке Код: | begin
if P_MESSAGE = 'VALIDATE' then
Draw();
end if;
end; | В локальных описаниях Код: | pragma macro (xl,'[OOXML]::[API_XL]');
procedure Draw ()
is
xl_out blob := empty_blob();
cur_row integer;
sheet_name varchar2;
begin
&xl.init_xls;
&xl.delSheet(1);
sheet_name := 'Page1';
&xl.new_sheet(sheet_name);
&xl.open_sheet(sheet_name);
cur_row := 1;
&xl.set_column_width(5, 1, 1);
&xl.cell(cur_row, 2, 'Номер');
for (select x(x.[NUM] :c_num) in ::[ MAIN_DOCUM]) loop
cur_row := cur_row+1;
&xl.cell(cur_row, 2, x.c_num);
end loop;
&xl.finish(xl_out);
::[OOXML].[API_ORSA].putReport2Run(xl_out, 'xlsx', 'Отчет');
end; |
|
|
 |
Volod Эксперт
Вступление в Клуб: 19.09.2007
|
Пн Ноя 19, 2018 09:55   |
|
Полезность: Нет оценки
|
1. с количеством столбцов проблем нет
2. не вижу в тексте excel.print_array
3. Цитата: | put(1, i, i, 'CM'); |
процедура Excel.put имеет другой набор параметров
procedure Put
/* Добавление значения в массив */
( Lin integer
/* Номер строки */
, Col integer
/* Номер колонки */
, Val varchar2(32767)
/* Добавляемое значение */
, p_copy_right integer := 0
/* на сколько ячеек сдублировать вправо */
, p_copy_down integer := 0
/* на сколько ячеек сдублировать вниз */
); |
|
 |
TannyGo Участник
Вступление в Клуб: 05.01.2018
|
Пн Ноя 19, 2018 10:12   |
|
Полезность: Нет оценки
|
Blackmore64 пишет: | Может попробовать переделать отчет в OOXML? [/code] |
Спасибо за совет, но сразу ошибка:
PLP-CLASS_NOT_FOUND: Тип [OOXML] не найден.
Наверное, пойду по другому пути. Попробую убедить, что лучше раздробить таблицу, а не выдавать нечитабельную информацию.
Хотя все равно интересно найти, в чем же проблема... |
|
 |
TannyGo Участник
Вступление в Клуб: 05.01.2018
|
Пн Ноя 19, 2018 10:38   |
|
Полезность: Нет оценки
|
Volod пишет: |
процедура Excel.put имеет другой набор параметров
|
Это не Excel.put, а локальная процедура:
Код: | Procedure Put( r number -- 1
,c number -- 2
,value varchar2(2000) -- 3
,Allighment varchar2(10) default null -- 4
,Bold boolean default false -- 5
,Italic boolean default false -- 6
,P_SIZE number default null -- 7
,FontName varchar2(50) default null -- 8
) is
Begin
If value = '0' Then value := '''' || value; End If;
[EXCEL].Write( r -- 1
,c -- 2
,value -- 3
,Bold -- 4
,Italic -- 5
,P_SIZE -- 6
,FontName -- 7
,Allighment -- 8
);
End; |
Последний раз редактировалось: TannyGo (Пн Ноя 19, 2018 16:16), всего редактировалось 1 раз |
|
 |
TannyGo Участник
Вступление в Клуб: 05.01.2018
|
Пн Ноя 19, 2018 16:01   |
|
Полезность: Нет оценки
|
Проблема решена!
В системной процедуре EXCEL.Write использовалось значение функции VCol, а там было ограничение, снятие которого решило все проблемы
Код: | -- Возвращает ссылку на колонку Excel
function vCol(idx integer) return varchar2 is
iMod integer;
iMain integer;
vRet varchar2(10);
Begin
--If idx <= 0 or idx > 256 Then
If idx <= 0 Then
return null;
End If; |
Всем спасибо! |
|
 |
|
|
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете голосовать в опросах
|
|