Ошибка формирования отчета в 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; | 	  
 
 
Всем спасибо! | 
			 
		  | 
	 
	
		  | 
	 
	
		 | 
	 
 
  
	 
	    
	   | 
	
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете голосовать в опросах
  | 
   
 
		 |