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:
// [$'Sheet2 A'.$B2] -> 'Sheet2 A'!$B2
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 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
//
......@@ -188,7 +154,10 @@ std::wstring oox2odf_converter::Impl::replace_cells_range_formater1(boost::wsmat
std::wstring c1 = what[2].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 +
(c2.empty() ? L"" : (L":" + sheet1 + L"." + c2) ) + std::wstring(L"]");
return s;
......@@ -267,8 +236,20 @@ void oox2odf_converter::Impl::replace_named_ref(std::wstring & expr)
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);
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";");
}
......@@ -594,16 +575,16 @@ std::wstring oox2odf_converter::Impl::convert_chart_distance(const std::wstring&
{
std::wstring expr = expr1;
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")");
if (res >=0) expr = expr.substr(0, res);
if (res ==expr.size()-2) expr = expr.substr(0, res);
// - -, --
std::vector<std::wstring> distance_inp;
std::vector<std::wstring> distance_out;
boost::algorithm::split(distance_inp,expr, boost::algorithm::is_any_of(L","), boost::algorithm::token_compress_on);
BOOST_FOREACH(std::wstring &d,distance_inp)
......
......@@ -198,6 +198,7 @@ static const def_language_code LanguageCodeTable[] =
odf_number_styles_context::odf_number_styles_context()
{
create_default(0);
}
void odf_number_styles_context::set_odf_context(odf_conversion_context * Context)
{
......
......@@ -58,13 +58,13 @@ void ods_conversion_context::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()
{
......
......@@ -75,8 +75,8 @@ public:
double convert_symbol_width(double val);
void start_defined_expressions();
void add_defined_range(std::wstring & name,std::wstring & cell_range, int sheet_id);
void add_defined_expression(std::wstring & name,std::wstring & value, 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, bool printable = false);
void end_defined_expressions(){}
void start_conditional_formats();
......
......@@ -28,7 +28,7 @@ void ods_table_context::start_defined_expressions(office_element_ptr & 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;
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
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);
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)
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
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;
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
{
odf_base_cell = iter->office_table_name_ + L".$A$1";
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;
}
i++;
......@@ -102,6 +114,7 @@ void ods_table_context::add_defined_expression(std::wstring & name,std::wstring
if (odf_base_cell.length() > 0)
named_expression->table_base_cell_address_ = odf_base_cell;
table_defined_expressions_.defined.push_back(elm);
}
......
......@@ -37,8 +37,8 @@ public:
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_expression(std::wstring & name,std::wstring & value, 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, bool printable = false);
private:
......
......@@ -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)
{
if (!office_table_style_)return;
......@@ -388,6 +396,7 @@ void ods_table_state::start_cell(office_element_ptr & elm, office_element_ptr &
ods_cell_state state;
state.empty = true;
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;
......@@ -408,7 +417,7 @@ void ods_table_state::set_cell_format_value(office_value_type::type value_type)
common_value_and_type_attlist cell_type;
cell_type.office_value_type_ = office_value_type(value_type);
cell->table_table_cell_attlist_.common_value_and_type_attlist_ = cell_type;
}
......@@ -556,6 +565,7 @@ void ods_table_state::set_cell_formula(std::wstring & formula)
if (cell == NULL)return;
cell->table_table_cell_attlist_.table_formula_ = odfFormula;
cells_.back().empty = false;
}
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
odf_formula = res;
}
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)
//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_)
{
......@@ -832,6 +845,11 @@ void ods_table_state::end_cell()
office_element_ptr & comm_elm = comments_[cells_.back().comment_idx].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)
......@@ -860,6 +878,7 @@ void ods_table_state::add_default_cell( int repeated)
ods_cell_state state;
state.empty = true;
state.elm = default_cell_elm; state.repeated = repeated;
state.row=current_table_row_; state.col =current_table_column_+1;
state.hyperlink_idx = is_cell_hyperlink(state.col, current_table_row_);
......
......@@ -128,6 +128,8 @@ struct ods_cell_state : ods_element_state
int hyperlink_idx;
int comment_idx;
bool empty;
};
struct ods_hyperlink_state
......@@ -162,11 +164,12 @@ class ods_table_state
{
public:
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_hidden(bool Val);
void set_table_tab_color(_CP_OPT(color) & _color);
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 set_column_width(double width);
......
......@@ -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: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:range-usable-as", table_range_usable_as_);
}
}
}
......
......@@ -54,6 +54,8 @@ public:
_CP_OPT(std::wstring) table_cell_range_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);
......
......@@ -159,8 +159,17 @@ void XlsxConverter::convert(OOX::Spreadsheet::CDefinedName *oox_defined)
sheet_id = oox_defined->m_oLocalSheetId->GetValue();
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)
......
......@@ -2,6 +2,6 @@
//1
//2
//0
//52
#define INTVER 1,2,0,52
#define STRVER "1,2,0,52\0"
//53
#define INTVER 1,2,0,53
#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