Merge pull request #37 from datRedHeadedGuy/master
Support columns up to the limit (currently XFD or 16384), and bug fix
This commit is contained in:
commit
331f05c825
@ -308,63 +308,71 @@ begin
|
|||||||
end get_xlsx_properties;
|
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
|
as
|
||||||
l_returnvalue number;
|
l_returnvalue number;
|
||||||
|
l_char_num number;
|
||||||
|
l_power number;
|
||||||
|
l_factor decimal;
|
||||||
begin
|
begin
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
||||||
Purpose: get column number from column reference
|
Purpose: get column number from column reference
|
||||||
|
|
||||||
Remarks:
|
Remarks:
|
||||||
|
|
||||||
Who Date Description
|
Who Date Description
|
||||||
------ ---------- --------------------------------
|
------ ---------- --------------------------------
|
||||||
MBR 11.07.2011 Created
|
MBR 11.07.2011 Created
|
||||||
|
JMW 29.11.2016 Modified to support columns up to the limit (currently XFD or 16384)
|
||||||
*/
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
l_power := length( p_column_ref ) - 1;
|
||||||
|
|
||||||
|
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_returnvalue := ( l_factor * power( 26, l_power )) + NVL( l_returnvalue, 0 );
|
||||||
|
l_power := l_power - 1;
|
||||||
|
end loop;
|
||||||
|
|
||||||
|
return l_returnvalue;
|
||||||
|
|
||||||
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;
|
|
||||||
|
|
||||||
return l_returnvalue;
|
|
||||||
|
|
||||||
end get_xlsx_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
|
as
|
||||||
l_offset number;
|
l_dividend decimal;
|
||||||
l_returnvalue varchar2(2);
|
l_modulo decimal;
|
||||||
|
l_returnvalue varchar2(3);
|
||||||
begin
|
begin
|
||||||
|
|
||||||
/*
|
|
||||||
|
|
||||||
Purpose: get column reference from column number
|
|
||||||
|
|
||||||
Remarks:
|
|
||||||
|
|
||||||
Who Date Description
|
|
||||||
------ ---------- --------------------------------
|
|
||||||
MBR 11.07.2011 Created
|
|
||||||
|
|
||||||
*/
|
|
||||||
|
|
||||||
if p_column_number < 27 then
|
/*
|
||||||
l_returnvalue := chr(p_column_number + 64);
|
|
||||||
else
|
Purpose: get column reference from column number
|
||||||
l_offset := trunc(p_column_number/26);
|
|
||||||
l_returnvalue := chr(l_offset + 64);
|
Remarks:
|
||||||
l_returnvalue := l_returnvalue || chr(p_column_number - (l_offset * 26) + 64);
|
|
||||||
end if;
|
Who Date Description
|
||||||
|
------ ---------- --------------------------------
|
||||||
return l_returnvalue;
|
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
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
l_dividend := p_column_number;
|
||||||
|
|
||||||
|
while l_dividend > 0 loop
|
||||||
|
l_modulo := mod( l_dividend - 1, 26 );
|
||||||
|
l_returnvalue := to_char( chr( l_modulo + 65 )) || l_returnvalue;
|
||||||
|
l_dividend := (( l_dividend - l_modulo ) / 26 );
|
||||||
|
end loop;
|
||||||
|
|
||||||
|
return l_returnvalue;
|
||||||
|
|
||||||
end get_xlsx_column_ref;
|
end get_xlsx_column_ref;
|
||||||
|
|
||||||
@ -879,6 +887,3 @@ end get_pptx_plaintext;
|
|||||||
|
|
||||||
end ooxml_util_pkg;
|
end ooxml_util_pkg;
|
||||||
/
|
/
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -107,7 +107,7 @@ as
|
|||||||
function get_xlsx_column_number (p_column_ref in varchar2) return number;
|
function get_xlsx_column_number (p_column_ref in varchar2) return number;
|
||||||
|
|
||||||
-- get column reference from column 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
|
-- get cell value from XLSX file
|
||||||
function get_xlsx_cell_value (p_xlsx in blob,
|
function get_xlsx_cell_value (p_xlsx in blob,
|
||||||
@ -148,5 +148,4 @@ as
|
|||||||
p_note in number := null) return clob;
|
p_note in number := null) return clob;
|
||||||
|
|
||||||
end ooxml_util_pkg;
|
end ooxml_util_pkg;
|
||||||
/
|
/
|
||||||
|
|
||||||
Loading…
x
Reference in New Issue
Block a user