Commit 68f540eb authored by Elen.Subbotina's avatar Elen.Subbotina Committed by Alexander Trofimov

(1.2.0.52): ASCOfficeOdfFileW

области печати

git-svn-id: svn://fileserver/activex/AVS/Sources/TeamlabOffice/trunk/ServerComponents@56429 954022d7-b5bf-4e40-9824-e11837661b57
parent 6a064368
...@@ -114,42 +114,8 @@ public: ...@@ -114,42 +114,8 @@ public:
// [$'Sheet2 A'.$B2] -> 'Sheet2 A'!$B2 // [$'Sheet2 A'.$B2] -> 'Sheet2 A'!$B2
void oox2odf_converter::Impl::replace_cells_range(std::wstring& expr) void oox2odf_converter::Impl::replace_cells_range(std::wstring& expr)
{ {
//std::vector<std::wstring> split1;
//std::vector<std::wstring> split2;
//boost::algorithm::split(split1,expr,boost::algorithm::is_any_of(L"!"), boost::algorithm::token_compress_on);
//std::wstring sheet, cells_range, cell1,cell2;
//if (split1.size() > 1)
//{
// sheet = split1[0];
// cells_range = split1[1]; //+ ???
//}else
// cells_range = split1[0];
//boost::algorithm::split(split2,cells_range,boost::algorithm::is_any_of(L":"), boost::algorithm::token_compress_on);
//cell1 = split2[0];
//if (split2.size() > 1)
//{
// cell2 = split2[1];
//}
//if (!sheet.empty() || !cell1.empty())
//{
// std::wstring s = /*std::wstring(L"[") */+ sheet + (sheet.empty() ? L"" : L".") +
// cell1 +
// (cell2.empty() ? L"" : (L":" + sheet + (sheet.empty() ? L"" : L".") + cell2) )/* + std::wstring(L"]")*/;
// expr = s;
//}
//return;
boost::wregex re(L"([:$!])+"); boost::wregex re(L"([:$!])+");
boost::wregex re1(L"(\\$?\\w+\\!)?([a-zA-Z$]+\\d{1,2})\\:?([a-zA-Z$]+\\d{1,2})?"); boost::wregex re1(L"(\\$?\\w+\\!)?([a-zA-Z$]+\\d{1,2})\\:?([a-zA-Z$]+\\d{1,2})?");
//boost::wregex re1(L"(\\$?(\\w*?\\s*?['\"]*)?)?\\!?([a-zA-Z$]+\\d{1,2})\\:?([a-zA-Z$]+\\d{1,2})?");
//boost::wregex re2(L"([a-zA-Z$]+\\d{1,2})\\:?([a-zA-Z$]+\\d{1,2})?");
// $ Sheet2 ! $ A1 : $ B5 // $ Sheet2 ! $ A1 : $ B5
// //
...@@ -188,7 +154,10 @@ std::wstring oox2odf_converter::Impl::replace_cells_range_formater1(boost::wsmat ...@@ -188,7 +154,10 @@ std::wstring oox2odf_converter::Impl::replace_cells_range_formater1(boost::wsmat
std::wstring c1 = what[2].str(); std::wstring c1 = what[2].str();
std::wstring c2 = what[3].str(); std::wstring c2 = what[3].str();
const std::wstring s = std::wstring(L"[")/* + (sheet1.length() > 0 ? L"$" : L"" ) */+ sheet1 + L"." + int res;
if (sheet1.length() > 0 && (res = c1.find(L"$")) >=0 ) sheet1 = L"$" + sheet1;
const std::wstring s = std::wstring(L"[") + sheet1 + L"." +
c1 + c1 +
(c2.empty() ? L"" : (L":" + sheet1 + L"." + c2) ) + std::wstring(L"]"); (c2.empty() ? L"" : (L":" + sheet1 + L"." + c2) ) + std::wstring(L"]");
return s; return s;
...@@ -267,8 +236,20 @@ void oox2odf_converter::Impl::replace_named_ref(std::wstring & expr) ...@@ -267,8 +236,20 @@ void oox2odf_converter::Impl::replace_named_ref(std::wstring & expr)
BOOST_FOREACH(std::wstring &d, distance) BOOST_FOREACH(std::wstring &d, distance)
{ {
boost::algorithm::replace_all(d, L"(", L"SCOBCAIN");
boost::algorithm::replace_all(d, L")", L"SCOBCAOUT");
boost::algorithm::replace_all(d, L" ", L"PROBEL");
boost::algorithm::replace_all(d, L"'", L"APOSTROF");
boost::algorithm::replace_all(d, L"\"", L"KAVYCHKA");
replace_cells_range(d); replace_cells_range(d);
boost::algorithm::replace_all(d, L"SCOBCAIN", L"(");
boost::algorithm::replace_all(d, L"SCOBCAOUT", L")");
boost::algorithm::replace_all(d, L"PROBEL", L" ");
boost::algorithm::replace_all(d, L"APOSTROF", L"'");
boost::algorithm::replace_all(d, L"KAVYCHKA", L"\"");
out = out + d + std::wstring(L";"); out = out + d + std::wstring(L";");
} }
...@@ -594,10 +575,10 @@ std::wstring oox2odf_converter::Impl::convert_chart_distance(const std::wstring& ...@@ -594,10 +575,10 @@ std::wstring oox2odf_converter::Impl::convert_chart_distance(const std::wstring&
{ {
std::wstring expr = expr1; std::wstring expr = expr1;
int res = expr.find(L"("); int res = expr.find(L"(");
if (res >=0) expr = expr.substr(res + 1, expr.size()-1); if (res ==0) expr = expr.substr(res + 1, expr.size()-1);
res= expr.rfind(L")"); res= expr.rfind(L")");
if (res >=0) expr = expr.substr(0, res); if (res ==expr.size()-2) expr = expr.substr(0, res);
// - -, -- // - -, --
......
...@@ -198,6 +198,7 @@ static const def_language_code LanguageCodeTable[] = ...@@ -198,6 +198,7 @@ static const def_language_code LanguageCodeTable[] =
odf_number_styles_context::odf_number_styles_context() odf_number_styles_context::odf_number_styles_context()
{ {
create_default(0);
} }
void odf_number_styles_context::set_odf_context(odf_conversion_context * Context) void odf_number_styles_context::set_odf_context(odf_conversion_context * Context)
{ {
......
...@@ -58,13 +58,13 @@ void ods_conversion_context::start_conditional_formats() ...@@ -58,13 +58,13 @@ void ods_conversion_context::start_conditional_formats()
current_table().start_conditional_formats(); current_table().start_conditional_formats();
} }
void ods_conversion_context::add_defined_range(std::wstring & name,std::wstring & cell_range, int sheet_id) void ods_conversion_context::add_defined_range(std::wstring & name,std::wstring & cell_range, int sheet_id, bool printable)
{ {
table_context_.add_defined_range(name,cell_range, sheet_id); table_context_.add_defined_range(name,cell_range, sheet_id, printable);
} }
void ods_conversion_context::add_defined_expression(std::wstring & name,std::wstring & value, int sheet_id) void ods_conversion_context::add_defined_expression(std::wstring & name,std::wstring & value, int sheet_id, bool printable)
{ {
table_context_.add_defined_expression(name,value, sheet_id); table_context_.add_defined_expression(name,value, sheet_id, printable);
} }
void ods_conversion_context::start_sheet() void ods_conversion_context::start_sheet()
{ {
......
...@@ -75,8 +75,8 @@ public: ...@@ -75,8 +75,8 @@ public:
double convert_symbol_width(double val); double convert_symbol_width(double val);
void start_defined_expressions(); void start_defined_expressions();
void add_defined_range(std::wstring & name,std::wstring & cell_range, int sheet_id); void add_defined_range(std::wstring & name,std::wstring & cell_range, int sheet_id, bool printable = false);
void add_defined_expression(std::wstring & name,std::wstring & value, int sheet_id); void add_defined_expression(std::wstring & name,std::wstring & value, int sheet_id, bool printable = false);
void end_defined_expressions(){} void end_defined_expressions(){}
void start_conditional_formats(); void start_conditional_formats();
......
...@@ -28,7 +28,7 @@ void ods_table_context::start_defined_expressions(office_element_ptr & root_elm) ...@@ -28,7 +28,7 @@ void ods_table_context::start_defined_expressions(office_element_ptr & root_elm)
table_defined_expressions_.root = root_elm; table_defined_expressions_.root = root_elm;
} }
void ods_table_context::add_defined_range(std::wstring & name,std::wstring & cell_range, int sheet_id) void ods_table_context::add_defined_range(std::wstring & name,std::wstring & cell_range, int sheet_id, bool printable)
{ {
office_element_ptr elm; office_element_ptr elm;
create_element(L"table", L"named-range",elm, &context_); create_element(L"table", L"named-range",elm, &context_);
...@@ -38,11 +38,15 @@ void ods_table_context::add_defined_range(std::wstring & name,std::wstring & cel ...@@ -38,11 +38,15 @@ void ods_table_context::add_defined_range(std::wstring & name,std::wstring & cel
static formulasconvert::oox2odf_converter formulas_converter; static formulasconvert::oox2odf_converter formulas_converter;
std::wstring odf_cell_range = formulas_converter.convert_named_ref(cell_range); std::wstring odf_range = formulas_converter.convert_named_ref(cell_range);//todo - / c []
boost::algorithm::replace_all(odf_range, L"[", L"");
boost::algorithm::replace_all(odf_range, L"]", L"");
std::wstring odf_base_cell = formulas_converter.find_base_cell(cell_range); std::wstring odf_base_cell = formulas_converter.find_base_cell(cell_range);
named_range->table_name_ = name; named_range->table_name_ = name;
named_range->table_cell_range_address_ = odf_cell_range; named_range->table_cell_range_address_ = odf_range;
if (printable)
named_range->table_range_usable_as_ = L"print-range";
if (odf_base_cell.length() > 0) if (odf_base_cell.length() > 0)
named_range->table_base_cell_address_ = odf_base_cell; named_range->table_base_cell_address_ = odf_base_cell;
...@@ -66,7 +70,7 @@ void ods_table_context::add_defined_range(std::wstring & name,std::wstring & cel ...@@ -66,7 +70,7 @@ void ods_table_context::add_defined_range(std::wstring & name,std::wstring & cel
table_defined_expressions_.root->add_child_element(elm); table_defined_expressions_.root->add_child_element(elm);
} }
void ods_table_context::add_defined_expression(std::wstring & name,std::wstring & value, int sheet_id) void ods_table_context::add_defined_expression(std::wstring & name,std::wstring & value, int sheet_id, bool printable)
{ {
office_element_ptr elm; office_element_ptr elm;
create_element(L"table", L"named-expression",elm, &context_); create_element(L"table", L"named-expression",elm, &context_);
...@@ -91,6 +95,14 @@ void ods_table_context::add_defined_expression(std::wstring & name,std::wstring ...@@ -91,6 +95,14 @@ void ods_table_context::add_defined_expression(std::wstring & name,std::wstring
{ {
odf_base_cell = iter->office_table_name_ + L".$A$1"; odf_base_cell = iter->office_table_name_ + L".$A$1";
iter->add_definded_expression(elm); iter->add_definded_expression(elm);
if ( printable)
{
boost::algorithm::replace_all(odf_value, L"[", L"");
boost::algorithm::replace_all(odf_value, L"]", L"");
boost::algorithm::replace_all(odf_value, L";", L" ");
iter->set_print_range(odf_value);
}
break; break;
} }
i++; i++;
...@@ -102,6 +114,7 @@ void ods_table_context::add_defined_expression(std::wstring & name,std::wstring ...@@ -102,6 +114,7 @@ void ods_table_context::add_defined_expression(std::wstring & name,std::wstring
if (odf_base_cell.length() > 0) if (odf_base_cell.length() > 0)
named_expression->table_base_cell_address_ = odf_base_cell; named_expression->table_base_cell_address_ = odf_base_cell;
table_defined_expressions_.defined.push_back(elm); table_defined_expressions_.defined.push_back(elm);
} }
......
...@@ -37,8 +37,8 @@ public: ...@@ -37,8 +37,8 @@ public:
void start_defined_expressions(office_element_ptr & root_elm); void start_defined_expressions(office_element_ptr & root_elm);
void add_defined_range(std::wstring & name,std::wstring & cell_range, int sheet_id); void add_defined_range(std::wstring & name,std::wstring & cell_range, int sheet_id, bool printable = false);
void add_defined_expression(std::wstring & name,std::wstring & value, int sheet_id); void add_defined_expression(std::wstring & name,std::wstring & value, int sheet_id, bool printable = false);
private: private:
......
...@@ -133,6 +133,14 @@ void ods_table_state::set_table_hidden(bool Val) ...@@ -133,6 +133,14 @@ void ods_table_state::set_table_hidden(bool Val)
} }
void ods_table_state::set_print_range(std::wstring range)
{
table_table* table = dynamic_cast<table_table*>(office_table_.get());
if (table == NULL)return;
table->table_table_attlist_.table_print_ranges_ = range;
}
void ods_table_state::set_table_tab_color(_CP_OPT(color) & _color) void ods_table_state::set_table_tab_color(_CP_OPT(color) & _color)
{ {
if (!office_table_style_)return; if (!office_table_style_)return;
...@@ -388,6 +396,7 @@ void ods_table_state::start_cell(office_element_ptr & elm, office_element_ptr & ...@@ -388,6 +396,7 @@ void ods_table_state::start_cell(office_element_ptr & elm, office_element_ptr &
ods_cell_state state; ods_cell_state state;
state.empty = true;
state.elm = elm; state.repeated = 1; state.style_name = style_name; state.style_elm = style_elm; state.elm = elm; state.repeated = 1; state.style_name = style_name; state.style_elm = style_elm;
state.row=current_table_row_; state.col =current_table_column_+1; state.row=current_table_row_; state.col =current_table_column_+1;
...@@ -556,6 +565,7 @@ void ods_table_state::set_cell_formula(std::wstring & formula) ...@@ -556,6 +565,7 @@ void ods_table_state::set_cell_formula(std::wstring & formula)
if (cell == NULL)return; if (cell == NULL)return;
cell->table_table_cell_attlist_.table_formula_ = odfFormula; cell->table_table_cell_attlist_.table_formula_ = odfFormula;
cells_.back().empty = false;
} }
std::wstring ods_table_state::replace_cell_row(boost::wsmatch const & what) std::wstring ods_table_state::replace_cell_row(boost::wsmatch const & what)
...@@ -659,6 +669,8 @@ void ods_table_state::add_or_find_cell_shared_formula(std::wstring & formula, st ...@@ -659,6 +669,8 @@ void ods_table_state::add_or_find_cell_shared_formula(std::wstring & formula, st
odf_formula = res; odf_formula = res;
} }
cell->table_table_cell_attlist_.table_formula_ = odf_formula; cell->table_table_cell_attlist_.table_formula_ = odf_formula;
cells_.back().empty = false;
} }
} }
} }
...@@ -763,6 +775,7 @@ void ods_table_state::set_cell_value(std::wstring & value) ...@@ -763,6 +775,7 @@ void ods_table_state::set_cell_value(std::wstring & value)
//cell->table_table_cell_attlist_.common_value_and_type_attlist_->office_value_type_ = office_value_type(office_value_type::Float); //cell->table_table_cell_attlist_.common_value_and_type_attlist_->office_value_type_ = office_value_type(office_value_type::Float);
//... //...
} }
cells_.back().empty = false;
if (cell->table_table_cell_attlist_.common_value_and_type_attlist_->office_value_type_) if (cell->table_table_cell_attlist_.common_value_and_type_attlist_->office_value_type_)
{ {
...@@ -832,6 +845,11 @@ void ods_table_state::end_cell() ...@@ -832,6 +845,11 @@ void ods_table_state::end_cell()
office_element_ptr & comm_elm = comments_[cells_.back().comment_idx].elm; office_element_ptr & comm_elm = comments_[cells_.back().comment_idx].elm;
cells_.back().elm->add_child_element(comm_elm); cells_.back().elm->add_child_element(comm_elm);
} }
if (cells_.back().empty)
{
table_table_cell* cell = dynamic_cast<table_table_cell*>(cells_.back().elm.get());
if (cell)cell->table_table_cell_attlist_.common_value_and_type_attlist_ = boost::none;
}
} }
void ods_table_state::add_default_cell( int repeated) void ods_table_state::add_default_cell( int repeated)
...@@ -860,6 +878,7 @@ void ods_table_state::add_default_cell( int repeated) ...@@ -860,6 +878,7 @@ void ods_table_state::add_default_cell( int repeated)
ods_cell_state state; ods_cell_state state;
state.empty = true;
state.elm = default_cell_elm; state.repeated = repeated; state.elm = default_cell_elm; state.repeated = repeated;
state.row=current_table_row_; state.col =current_table_column_+1; state.row=current_table_row_; state.col =current_table_column_+1;
state.hyperlink_idx = is_cell_hyperlink(state.col, current_table_row_); state.hyperlink_idx = is_cell_hyperlink(state.col, current_table_row_);
......
...@@ -128,6 +128,8 @@ struct ods_cell_state : ods_element_state ...@@ -128,6 +128,8 @@ struct ods_cell_state : ods_element_state
int hyperlink_idx; int hyperlink_idx;
int comment_idx; int comment_idx;
bool empty;
}; };
struct ods_hyperlink_state struct ods_hyperlink_state
...@@ -162,11 +164,12 @@ class ods_table_state ...@@ -162,11 +164,12 @@ class ods_table_state
{ {
public: public:
ods_table_state(ods_conversion_context & Context, office_element_ptr & elm); ods_table_state(ods_conversion_context & Context, office_element_ptr & elm);
void set_table_name(std::wstring); void set_table_name(std::wstring name);
void set_table_style(office_element_ptr & _style); void set_table_style(office_element_ptr & _style);
void set_table_hidden(bool Val); void set_table_hidden(bool Val);
void set_table_tab_color(_CP_OPT(color) & _color); void set_table_tab_color(_CP_OPT(color) & _color);
void set_table_dimension(int col, int row); void set_table_dimension(int col, int row);
void set_print_range(std::wstring range);
void add_column(office_element_ptr & elm, int repeated ,office_element_ptr & style); void add_column(office_element_ptr & elm, int repeated ,office_element_ptr & style);
void set_column_width(double width); void set_column_width(double width);
......
...@@ -80,6 +80,7 @@ void table_named_range::serialize(std::wostream & _Wostream) ...@@ -80,6 +80,7 @@ void table_named_range::serialize(std::wostream & _Wostream)
CP_XML_ATTR_OPT(L"table:name", table_name_); CP_XML_ATTR_OPT(L"table:name", table_name_);
CP_XML_ATTR_OPT(L"table:cell-range-address", table_cell_range_address_); CP_XML_ATTR_OPT(L"table:cell-range-address", table_cell_range_address_);
CP_XML_ATTR_OPT(L"table:base-cell-address", table_base_cell_address_); CP_XML_ATTR_OPT(L"table:base-cell-address", table_base_cell_address_);
CP_XML_ATTR_OPT(L"table:range-usable-as", table_range_usable_as_);
} }
} }
} }
......
...@@ -54,6 +54,8 @@ public: ...@@ -54,6 +54,8 @@ public:
_CP_OPT(std::wstring) table_cell_range_address_; _CP_OPT(std::wstring) table_cell_range_address_;
_CP_OPT(std::wstring) table_base_cell_address_; _CP_OPT(std::wstring) table_base_cell_address_;
_CP_OPT(std::wstring) table_range_usable_as_;//printrange, filter , repeatrow, repeatcolumn
}; };
CP_REGISTER_OFFICE_ELEMENT2(table_named_range); CP_REGISTER_OFFICE_ELEMENT2(table_named_range);
......
...@@ -159,8 +159,17 @@ void XlsxConverter::convert(OOX::Spreadsheet::CDefinedName *oox_defined) ...@@ -159,8 +159,17 @@ void XlsxConverter::convert(OOX::Spreadsheet::CDefinedName *oox_defined)
sheet_id = oox_defined->m_oLocalSheetId->GetValue(); sheet_id = oox_defined->m_oLocalSheetId->GetValue();
if (oox_defined->m_oName.IsInit() && oox_defined->m_oRef.IsInit()) if (oox_defined->m_oName.IsInit() && oox_defined->m_oRef.IsInit())
ods_context->add_defined_expression (string2std_string(oox_defined->m_oName.get2()), {
string2std_string(oox_defined->m_oRef.get2()), sheet_id); std::wstring name = string2std_string(oox_defined->m_oName.get2());
bool printable = false;
if (name == L"_xlnm.Print_Area")printable = true;
if (false)// - range, -
ods_context->add_defined_range (name, string2std_string(oox_defined->m_oRef.get2()), sheet_id, printable);
else
ods_context->add_defined_expression (name, string2std_string(oox_defined->m_oRef.get2()), sheet_id, printable);
}
} }
void XlsxConverter::convert(OOX::Spreadsheet::CWorksheet *oox_sheet) void XlsxConverter::convert(OOX::Spreadsheet::CWorksheet *oox_sheet)
......
...@@ -2,6 +2,6 @@ ...@@ -2,6 +2,6 @@
//1 //1
//2 //2
//0 //0
//52 //53
#define INTVER 1,2,0,52 #define INTVER 1,2,0,53
#define STRVER "1,2,0,52\0" #define STRVER "1,2,0,53\0"
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment