Modified ooxml_util_pkg functions
Modified the ooxml_util_pkg.get_xlsx_column_ref and the ooxml_util_pkg.get_xlsx_column_number functions to support columns up to the limit (currently XFD or 16384) and in ooxml_util_pkg.get_xlsx_column_ref to fix the bug where the '@' is returned at multiples of 26.
This commit is contained in:
parent
11a15da296
commit
33aeca0f20
@ -308,9 +308,12 @@ begin
|
||||
end get_xlsx_properties;
|
||||
|
||||
|
||||
function get_xlsx_column_number (p_column_ref in varchar2) return number
|
||||
function get_xlsx_column_number( p_column_ref in varchar2 ) return number
|
||||
as
|
||||
l_returnvalue number;
|
||||
l_column_number number;
|
||||
l_char_num number;
|
||||
l_power number;
|
||||
l_factor decimal;
|
||||
begin
|
||||
|
||||
/*
|
||||
@ -322,26 +325,29 @@ begin
|
||||
Who Date Description
|
||||
------ ---------- --------------------------------
|
||||
MBR 11.07.2011 Created
|
||||
JMW 29.11.2016 Modified to support columns up to the limit (currently XFD or 16384)
|
||||
|
||||
*/
|
||||
|
||||
if length(p_column_ref) > 1 then
|
||||
l_returnvalue := ascii(substr(p_column_ref,1,1)) - 64;
|
||||
l_returnvalue := l_returnvalue * 26;
|
||||
l_returnvalue := l_returnvalue + (ascii(substr(p_column_ref,2,1)) - 64);
|
||||
else
|
||||
l_returnvalue := ascii(p_column_ref) - 64;
|
||||
end if;
|
||||
l_power := length( p_column_ref ) - 1;
|
||||
|
||||
return l_returnvalue;
|
||||
for i in 1..length( p_column_ref ) loop
|
||||
l_char_num := ascii( substr( p_column_ref, i, 1 ));
|
||||
l_factor := ( l_char_num - 65 ) + 1;
|
||||
l_column_number := ( l_factor * power( 26, l_power )) + NVL( l_column_number, 0 );
|
||||
l_power := l_power - 1;
|
||||
end loop;
|
||||
|
||||
return l_column_number;
|
||||
|
||||
end get_xlsx_column_number;
|
||||
|
||||
|
||||
function get_xlsx_column_ref (p_column_number in varchar2) return varchar2
|
||||
function get_xlsx_column_ref( p_column_number in number ) return varchar2
|
||||
as
|
||||
l_offset number;
|
||||
l_returnvalue varchar2(2);
|
||||
l_dividend decimal;
|
||||
l_modulo decimal;
|
||||
l_column_name varchar2(3);
|
||||
begin
|
||||
|
||||
/*
|
||||
@ -353,18 +359,20 @@ begin
|
||||
Who Date Description
|
||||
------ ---------- --------------------------------
|
||||
MBR 11.07.2011 Created
|
||||
JMW 29.11.2016 Modified to support columns up to the limit (currently XFD or 16384)
|
||||
and to fix the bug where the '@' is returned at multiples of 26
|
||||
|
||||
*/
|
||||
|
||||
if p_column_number < 27 then
|
||||
l_returnvalue := chr(p_column_number + 64);
|
||||
else
|
||||
l_offset := trunc(p_column_number/26);
|
||||
l_returnvalue := chr(l_offset + 64);
|
||||
l_returnvalue := l_returnvalue || chr(p_column_number - (l_offset * 26) + 64);
|
||||
end if;
|
||||
l_dividend := p_column_number;
|
||||
|
||||
return l_returnvalue;
|
||||
while l_dividend > 0 loop
|
||||
l_modulo := mod( l_dividend - 1, 26 );
|
||||
l_column_name := to_char( chr( l_modulo + 65 )) || l_column_name;
|
||||
l_dividend := (( l_dividend - l_modulo ) / 26 );
|
||||
end loop;
|
||||
|
||||
return l_column_name;
|
||||
|
||||
end get_xlsx_column_ref;
|
||||
|
||||
@ -879,6 +887,3 @@ end get_pptx_plaintext;
|
||||
|
||||
end ooxml_util_pkg;
|
||||
/
|
||||
|
||||
|
||||
|
||||
|
||||
@ -107,7 +107,7 @@ as
|
||||
function get_xlsx_column_number (p_column_ref in varchar2) return number;
|
||||
|
||||
-- get column reference from column number
|
||||
function get_xlsx_column_ref (p_column_number in varchar2) return varchar2;
|
||||
function get_xlsx_column_ref (p_column_number in number) return varchar2;
|
||||
|
||||
-- get cell value from XLSX file
|
||||
function get_xlsx_cell_value (p_xlsx in blob,
|
||||
@ -149,4 +149,3 @@ as
|
||||
|
||||
end ooxml_util_pkg;
|
||||
/
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user