diff --git a/OOXML/Projects/Windows/DocxFormatLib/DocxFormatLib.vcxproj b/OOXML/Projects/Windows/DocxFormatLib/DocxFormatLib.vcxproj index 203228103c..4dc49f0162 100644 --- a/OOXML/Projects/Windows/DocxFormatLib/DocxFormatLib.vcxproj +++ b/OOXML/Projects/Windows/DocxFormatLib/DocxFormatLib.vcxproj @@ -350,9 +350,11 @@ + + @@ -513,7 +515,9 @@ + + diff --git a/OOXML/Projects/Windows/DocxFormatLib/DocxFormatLib.vcxproj.filters b/OOXML/Projects/Windows/DocxFormatLib/DocxFormatLib.vcxproj.filters index 0320b64eca..8b9170151f 100644 --- a/OOXML/Projects/Windows/DocxFormatLib/DocxFormatLib.vcxproj.filters +++ b/OOXML/Projects/Windows/DocxFormatLib/DocxFormatLib.vcxproj.filters @@ -547,6 +547,12 @@ XlsxFormat\Workbook + + XlsxFormat\Pivots + + + XlsxFormat\Pivots + @@ -963,5 +969,11 @@ XlsxFormat\Workbook + + XlsxFormat\Pivots + + + XlsxFormat\Pivots + \ No newline at end of file diff --git a/OdfFile/Writer/Format/ods_table_state.cpp b/OdfFile/Writer/Format/ods_table_state.cpp index 745d154b72..465bea2eda 100644 --- a/OdfFile/Writer/Format/ods_table_state.cpp +++ b/OdfFile/Writer/Format/ods_table_state.cpp @@ -58,11 +58,11 @@ namespace cpdoccore { namespace odf_writer { -int ods_table_state::current_table_column_ = 0; -int ods_table_state::current_table_row_ = 0; + _INT32 ods_table_state::current_table_column_ = 0; + _INT32 ods_table_state::current_table_row_ = 0; -int ods_table_state::tmp_column_ =0; -int ods_table_state::tmp_row_ =0; + _INT32 ods_table_state::tmp_column_ =0; + _INT32 ods_table_state::tmp_row_ =0; namespace utils//////////////////////////////////////////// ОБЩАЯ хрень .. вытащить что ли в utils ??? @@ -347,15 +347,15 @@ void ods_table_state::end_headers() { current_level_.pop_back(); } -void ods_table_state::add_column_break(int val) +void ods_table_state::add_column_break(_INT32 val) { column_breaks_.push_back(val + 1); } -void ods_table_state::add_row_break(int val) +void ods_table_state::add_row_break(_INT32 val) { row_breaks_.push_back(val + 1); } -void ods_table_state::add_column(office_element_ptr & elm, unsigned int repeated,office_element_ptr & style_elm) +void ods_table_state::add_column(office_element_ptr & elm, _UINT32 repeated,office_element_ptr & style_elm) { current_level_.back()->add_child_element(elm); @@ -364,7 +364,7 @@ void ods_table_state::add_column(office_element_ptr & elm, unsigned int repeated odf_writer::style* style = dynamic_cast(style_elm.get()); if (style)style_name = style->style_name_; - ods_element_state state(elm, repeated, style_name, style_elm, defaut_column_width_, current_level_.size()); + ods_column_state state(elm, repeated, style_name, style_elm, defaut_column_width_, current_level_.size()); //if (repeated > 10000) repeated = 1024;//???? @@ -389,13 +389,13 @@ void ods_table_state::set_column_default_cell_style(std::wstring & style_name) columns_.back().cell_style_name = style_name; } -std::wstring ods_table_state::get_column_default_cell_style(int column) +std::wstring ods_table_state::get_column_default_cell_style(_INT32 column) { - int curr=0; + _INT32 curr = 0; for (size_t i=0; i < columns_.size(); i++) { - if (curr + (int)columns_[i].repeated < column + 1)continue; + if (curr + (_INT32)columns_[i].repeated < column + 1) continue; else { return columns_[i].cell_style_name; @@ -443,7 +443,7 @@ void ods_table_state::set_column_hidden(bool val) column->attlist_.table_visibility_ = table_visibility(table_visibility::Collapse); } -void ods_table_state::set_table_dimension(int col, int row) +void ods_table_state::set_table_dimension(_INT32 col, _INT32 row) { if (col < 1 || row < 1 ) return; @@ -451,7 +451,7 @@ void ods_table_state::set_table_dimension(int col, int row) if (dimension_row < row) dimension_row = row + 1; } -void ods_table_state::add_row(office_element_ptr & elm, unsigned int repeated, office_element_ptr & style_elm) +void ods_table_state::add_row(office_element_ptr & elm, _UINT32 repeated, office_element_ptr & style_elm) { current_table_column_ = 0; current_table_row_ += repeated; @@ -466,7 +466,6 @@ void ods_table_state::add_row(office_element_ptr & elm, unsigned int repeated, o i--; } } - current_level_.back()->add_child_element(elm); std::wstring style_name; @@ -474,7 +473,7 @@ void ods_table_state::add_row(office_element_ptr & elm, unsigned int repeated, o odf_writer::style* style = dynamic_cast(style_elm.get()); if (style)style_name = style->style_name_; - ods_element_state state(elm, repeated, style_name, style_elm, defaut_row_height_ , current_level_.size()); + ods_row_state state(elm, repeated, style_name, style_elm, defaut_row_height_, current_level_.size()); rows_.push_back(state); @@ -492,7 +491,7 @@ void ods_table_state::add_row_repeated() table_table_row* row = dynamic_cast(rows_.back().elm.get()); if (row == NULL)return; - unsigned int t = rows_.back().repeated; + _UINT32 t = rows_.back().repeated; rows_.back().repeated++; current_table_row_++; @@ -551,31 +550,31 @@ bool ods_table_state::is_cell_comment() bool ods_table_state::is_cell_data_validation() { if (cells_.empty()) return false; - return cells_.back().data_validation_name.empty() ? true : false; + return cells_.back().data_validation_idx >= 0 ? true : false; } -int ods_table_state::is_cell_hyperlink(int col, int row) +_INT32 ods_table_state::is_cell_hyperlink(_INT32 col, _INT32 row) { for (size_t i = 0; i < hyperlinks_.size(); i++) { if (hyperlinks_[i].col == col && hyperlinks_[i].row == row) { - return (int)i; + return (_INT32)i; } } return -1; } -std::wstring ods_table_state::is_cell_data_validation(int col, int row, unsigned int repeate_col, data_validation_state::_ref & ref) +_INT32 ods_table_state::is_cell_data_validation(_INT32 col, _INT32 row, _UINT32 repeate_col, data_validation_state::_ref & ref) { for (size_t i = 0; i < data_validations_.size(); i++) { if (data_validations_[i].in_ref(col, row, repeate_col, ref)) { - return data_validations_[i].name; + return (_INT32)i; } } - return L""; + return -1; } -int ods_table_state::is_row_validation(int row, int & repeate_row) +_INT32 ods_table_state::is_row_validation(_INT32 row, _INT32 & repeate_row) { for (size_t i = 0; i < data_validations_.size(); i++) { @@ -590,18 +589,18 @@ int ods_table_state::is_row_validation(int row, int & repeate_row) } return -1; } -int ods_table_state::is_cell_comment(int col, int row, unsigned int repeate_col) +_INT32 ods_table_state::is_cell_comment(_INT32 col, _INT32 row, _UINT32 repeate_col) { for (size_t i = 0; i < comments_.size(); i++) { - if ((comments_[i].col < col + (int)repeate_col && comments_[i].col >= col) && comments_[i].row == row && comments_[i].used == false) + if ((comments_[i].col < col + (_INT32)repeate_col && comments_[i].col >= col) && comments_[i].row == row && comments_[i].used == false) { - return (int)i; + return (_INT32)i; } } return -1; } -int ods_table_state::is_row_comment(int row, int repeate_row) +_INT32 ods_table_state::is_row_comment(_INT32 row, _INT32 repeate_row) { for (size_t i = 0; i < comments_.size(); i++) { @@ -612,18 +611,18 @@ int ods_table_state::is_row_comment(int row, int repeate_row) } return -1; } -int ods_table_state::current_column() const +_INT32 ods_table_state::current_column() const { return current_table_column_; } -int ods_table_state::current_row() const +_INT32 ods_table_state::current_row() const { return current_table_row_; } -unsigned int ods_table_state::get_last_row_repeated () +_UINT32 ods_table_state::get_last_row_repeated () { return rows_.empty() ? 1 : rows_.back().repeated; } @@ -691,11 +690,10 @@ void ods_table_state::start_cell(office_element_ptr & elm, office_element_ptr & state.row = current_table_row_; state.col = current_table_column_ + 1; data_validation_state::_ref ref; - std::wstring validation_name = is_cell_data_validation(state.col, state.row, 1, ref); - state.hyperlink_idx = is_cell_hyperlink(state.col, state.row); - state.comment_idx = is_cell_comment(state.col, state.row); - state.data_validation_name = validation_name; + state.hyperlink_idx = is_cell_hyperlink(state.col, state.row); + state.comment_idx = is_cell_comment(state.col, state.row); + state.data_validation_idx = is_cell_data_validation(state.col, state.row, 1, ref); current_table_column_ += state.repeated; cells_.push_back(state); @@ -760,7 +758,7 @@ void ods_table_state::add_definded_expression(office_element_ptr & elm) if (!table_defined_expressions_)return; table_defined_expressions_->add_child_element(elm); } -void ods_table_state::add_hyperlink(const std::wstring & ref,int col, int row, const std::wstring & link, const std::wstring & location) +void ods_table_state::add_hyperlink(const std::wstring & ref, _INT32 col, _INT32 row, const std::wstring & link, const std::wstring & location) { ods_hyperlink_state state; state.row = row; state.col = col; state.ref = ref; @@ -779,7 +777,7 @@ void ods_table_state::add_hyperlink(const std::wstring & ref,int col, int row, c hyperlinks_.push_back(state); } -void ods_table_state::start_comment(int col, int row, std::wstring & author) +void ods_table_state::start_comment(_INT32 col, _INT32 row, std::wstring & author) { ods_comment_state state; @@ -787,7 +785,7 @@ void ods_table_state::start_comment(int col, int row, std::wstring & author) create_element(L"office", L"annotation", state.elm, context_); office_annotation * annotation = dynamic_cast(state.elm.get()); - if (!annotation)return; + if (!annotation) return; context_->styles_context()->create_style(L"", style_family::Graphic, true, false, -1); @@ -859,15 +857,15 @@ void ods_table_state::end_comment(odf_text_context *text_context) void ods_table_state::check_spanned_cells() { - for (std::map>::iterator it = map_merged_cells.begin(); it != map_merged_cells.end(); ++it) + for (std::map<_INT32, std::map<_INT32, _spanned_info>>::iterator it = map_merged_cells.begin(); it != map_merged_cells.end(); ++it) { - for (std::map::iterator jt = it->second.begin(); jt != it->second.end(); ++jt) + for (std::map<_INT32, _spanned_info>::iterator jt = it->second.begin(); jt != it->second.end(); ++jt) { - int start_row = it->first; - int end_row = it->first + jt->second.spanned_rows; + _INT32 start_row = it->first; + _INT32 end_row = it->first + jt->second.spanned_rows; - int start_col = jt->first; - int end_col = jt->first + jt->second.spanned_cols; + _INT32 start_col = jt->first; + _INT32 end_col = jt->first + jt->second.spanned_cols; for (size_t i = 0; i < cells_.size(); ++i) //todooo cells_ vector -> map by row { @@ -891,7 +889,7 @@ void ods_table_state::check_spanned_cells() } } -void ods_table_state::set_merge_cells(int start_col, int start_row, int end_col, int end_row) +void ods_table_state::set_merge_cells(_INT32 start_col, _INT32 start_row, _INT32 end_col, _INT32 end_row) { if (end_col - start_col < 0) return; if (end_row - start_row < 0) return; @@ -903,18 +901,18 @@ void ods_table_state::set_merge_cells(int start_col, int start_row, int end_col, //if (info.spanned_cols > 10000) info.spanned_cols = 1024; - std::map>::iterator pFindRow = map_merged_cells.find(start_row); + std::map<_INT32, std::map<_INT32, _spanned_info>>::iterator pFindRow = map_merged_cells.find(start_row); if (pFindRow == map_merged_cells.end()) { - std::map mapCols; + std::map<_INT32, _spanned_info> mapCols; mapCols.insert(std::make_pair(start_col, info)); map_merged_cells.insert(std::make_pair(start_row, mapCols)); } else { - std::map::iterator pFindCol = pFindRow->second.find(start_col); + std::map<_INT32, _spanned_info>::iterator pFindCol = pFindRow->second.find(start_col); if (pFindCol == pFindRow->second.end()) { pFindRow->second.insert(std::make_pair(start_col, info)); @@ -923,15 +921,15 @@ void ods_table_state::set_merge_cells(int start_col, int start_row, int end_col, //else нереально pFindCol->second.insert(info); } } -bool ods_table_state::isSpannedCell(int col, int row, int &spanned_cols, int &spanned_rows ) +bool ods_table_state::isSpannedCell(_INT32 col, _INT32 row, _INT32&spanned_cols, _INT32&spanned_rows ) { spanned_cols = spanned_rows = 0; - std::map>::iterator pFindRow = map_merged_cells.find(row); + std::map<_INT32, std::map<_INT32, _spanned_info>>::iterator pFindRow = map_merged_cells.find(row); if (pFindRow != map_merged_cells.end()) { - std::map::iterator pFindCol = pFindRow->second.find(col); + std::map<_INT32, _spanned_info>::iterator pFindCol = pFindRow->second.find(col); if (pFindCol != pFindRow->second.end()) { spanned_cols = pFindCol->second.spanned_cols; @@ -961,7 +959,7 @@ bool ods_table_state::isSpannedCell(int col, int row, int &spanned_cols, int &sp } return false; } -bool ods_table_state::isCoveredCell( int col, int repeated_cols) +bool ods_table_state::isCoveredCell(_INT32 col, _INT32 repeated_cols) { if (current_covered_cols_ > 0) return true; @@ -976,7 +974,7 @@ bool ods_table_state::isCoveredCell( int col, int repeated_cols) return false; } -void ods_table_state::set_cell_spanned(int spanned_cols, int spanned_rows) +void ods_table_state::set_cell_spanned(_INT32 spanned_cols, _INT32 spanned_rows) { table_table_cell* cell = dynamic_cast(cells_.back().elm.get()); if (cell == NULL)return; @@ -1068,10 +1066,10 @@ std::wstring ods_table_state::replace_cell_row(boost::wsmatch const & what) if (what[1].matched) { std::wstring ref_formula = what[1].str(); - int col_formula=0, row_formula=0; + _INT32 col_formula = 0, row_formula = 0; utils::parsing_ref(ref_formula, col_formula, row_formula);col_formula--;//инче отсчет с 1 - ref_formula = utils::getColAddress(col_formula) + std::to_wstring(row_formula +current_table_row_ - tmp_row_); + ref_formula = utils::getColAddress(col_formula) + std::to_wstring(row_formula + current_table_row_ - tmp_row_); return ref_formula; @@ -1088,10 +1086,10 @@ std::wstring ods_table_state::replace_cell_column(boost::wsmatch const & what) if (what[1].matched) { std::wstring ref_formula = what[1].str(); - int col_formula=0, row_formula=0; + _INT32 col_formula = 0, row_formula =0; utils::parsing_ref(ref_formula, col_formula, row_formula);col_formula--; - ref_formula = utils::getColAddress(col_formula+current_table_column_ -tmp_column_)+boost::lexical_cast(row_formula); + ref_formula = utils::getColAddress(col_formula+current_table_column_ - tmp_column_)+boost::lexical_cast(row_formula); return ref_formula; } @@ -1103,7 +1101,7 @@ std::wstring ods_table_state::replace_cell_column(boost::wsmatch const & what) return L""; } -void ods_table_state::add_or_find_cell_shared_formula(std::wstring & formula, std::wstring ref, int ind) +void ods_table_state::add_or_find_cell_shared_formula(std::wstring & formula, std::wstring ref, _INT32 ind) { if (ind < 0)return; @@ -1122,22 +1120,22 @@ void ods_table_state::add_or_find_cell_shared_formula(std::wstring & formula, st boost::algorithm::split(distance, ref, boost::algorithm::is_any_of(L":"), boost::algorithm::token_compress_on); if (distance.size() > 1) { - int col1, row1, col2, row2; + _INT32 col1, row1, col2, row2; utils::parsing_ref(distance[0], col1, row1); utils::parsing_ref(distance[1], col2, row2); if (row2 - row1 > 0) moving_type = 2; - if (col2 - col1 > 0)moving_type = 1; + if (col2 - col1 > 0) moving_type = 1; } - ods_shared_formula_state state = {(unsigned int)ind, odf_formula,ref, current_table_column_,current_table_row_, moving_type}; - shared_formulas_.insert(std::make_pair((unsigned int)ind, state)); + ods_shared_formula_state state = {(_UINT32)ind, odf_formula,ref, current_table_column_,current_table_row_, moving_type}; + shared_formulas_.insert(std::make_pair((_UINT32)ind, state)); cell->attlist_.table_formula_ = odf_formula; cells_.back().empty = false; } else { - std::map::iterator pFind = shared_formulas_.find(ind); + std::map<_UINT32, ods_shared_formula_state>::iterator pFind = shared_formulas_.find(ind); if (pFind != shared_formulas_.end()) { @@ -1182,13 +1180,13 @@ void ods_table_state::set_cell_array_formula(std::wstring & formula, std::wstrin std::vector ref_cells; boost::algorithm::split(ref_cells,ref, boost::algorithm::is_any_of(L":"), boost::algorithm::token_compress_on); - int row_span = 0; - int col_span = 0; + _INT32 row_span = 0; + _INT32 col_span = 0; if (ref_cells.size() ==2) { - int col1 = -1, row1 = -1; - int col2 = -1, row2 = -1; + _INT32 col1 = -1, row1 = -1; + _INT32 col2 = -1, row2 = -1; utils::parsing_ref (ref_cells[0], col1, row1); utils::parsing_ref (ref_cells[1], col2, row2); @@ -1226,7 +1224,7 @@ void ods_table_state::convert_position(oox_table_position & oox_pos, double & x, for (i = 0; i < columns_.size(); i++) { - if (oox_pos.col >(int)(columns_[i].repeated + curr_col)) + if (oox_pos.col >(_INT32)(columns_[i].repeated + curr_col)) { sz_col += (columns_[i].repeated ) * columns_[i].size; } @@ -1239,7 +1237,7 @@ void ods_table_state::convert_position(oox_table_position & oox_pos, double & x, curr_col += columns_[i].repeated; } - if ((int)curr_col < oox_pos.col && false == columns_.empty()) + if ((_INT32)curr_col < oox_pos.col && false == columns_.empty()) { sz_col += (oox_pos.col - curr_col) * columns_[columns_.size() - 1].size; } @@ -1251,7 +1249,7 @@ void ods_table_state::convert_position(oox_table_position & oox_pos, double & x, size_t curr_row =0 ; for (i = 0; i < rows_.size(); i++) { - if (oox_pos.row >(int)(rows_[i].repeated + curr_row)) + if (oox_pos.row >(_INT32)(rows_[i].repeated + curr_row)) { sz_row += (rows_[i].repeated ) * rows_[i].size; } @@ -1265,7 +1263,7 @@ void ods_table_state::convert_position(oox_table_position & oox_pos, double & x, curr_row += rows_[i].repeated; } - if ((int)curr_row < oox_pos.row && false == rows_.empty()) + if ((_INT32)curr_row < oox_pos.row && false == rows_.empty()) { sz_row += (oox_pos.row - curr_row ) * rows_[rows_.size() - 1].size; } @@ -1485,10 +1483,11 @@ void ods_table_state::end_cell() cells_.back().elm->add_child_element(comm_elm); comments_[cells_.back().comment_idx].used = true; } - if (false == cells_.back().data_validation_name.empty()) + if (cells_.back().data_validation_idx >= 0) { table_table_cell* cell = dynamic_cast(cells_.back().elm.get()); - if (cell)cell->attlist_.table_content_validation_name_ = cells_.back().data_validation_name; + if (cell) + cell->attlist_.table_content_validation_name_ = data_validations_[cells_.back().data_validation_idx].name; } if (cells_.back().empty) { @@ -1501,15 +1500,15 @@ void ods_table_state::end_cell() } } -void ods_table_state::add_default_cell( int repeated) +void ods_table_state::add_default_cell(_INT32 repeated) { if (repeated < 1) return; - int comment_idx = is_cell_comment(current_table_column_ + 1, current_table_row_, repeated); + _INT32 comment_idx = is_cell_comment(current_table_column_ + 1, current_table_row_, repeated); if (comment_idx >= 0 && repeated > 1) { //делим на 3 - до, с комметом, после; - int c = current_table_column_; + _INT32 c = current_table_column_; add_default_cell(comments_[comment_idx].col - c - 1); add_default_cell(1); @@ -1518,19 +1517,19 @@ void ods_table_state::add_default_cell( int repeated) return; } //----------------------------------------------------------------------------------------- - std::map>::iterator pFindRow = map_merged_cells.find(current_table_row_); + std::map<_INT32, std::map<_INT32, _spanned_info>>::iterator pFindRow = map_merged_cells.find(current_table_row_); bool bSpanned = false; if (pFindRow != map_merged_cells.end()) { - for (std::map::iterator it = pFindRow->second.begin(); !bSpanned && it != pFindRow->second.end(); ++it) + for (std::map<_INT32, _spanned_info>::iterator it = pFindRow->second.begin(); !bSpanned && it != pFindRow->second.end(); ++it) { if (it->first < current_table_column_ + repeated + 1 && it->first >= current_table_column_ + 1) { if (repeated > 1) { //делим на 3 - до, с spanned, после; - int c = current_table_column_; + _INT32 c = current_table_column_; add_default_cell(it->first - c - 1); add_default_cell(1); @@ -1548,14 +1547,14 @@ void ods_table_state::add_default_cell( int repeated) } //----------------------------------------------------------------------------------------- data_validation_state::_ref ref; - std::wstring validation_name = is_cell_data_validation(current_table_column_ + 1, current_table_row_, repeated, ref); + _INT32 data_validation_idx = is_cell_data_validation(current_table_column_ + 1, current_table_row_, repeated, ref); - int repeated_validation = (std::min)(ref.col_end, current_table_column_ + (int)repeated) - (std::max)(ref.col_start, current_table_column_ + 1) + 1; + _INT32 repeated_validation = (std::min)(ref.col_end, current_table_column_ + (_INT32)repeated) - (std::max)(ref.col_start, current_table_column_ + 1) + 1; - if (false == validation_name.empty() && repeated > 1 && repeated_validation != repeated) + if (data_validation_idx >= 0 && repeated > 1 && repeated_validation != repeated) { //делим на 3 - до, с validation, после; - int c = current_table_column_; + _INT32 c = current_table_column_; add_default_cell(ref.col_start - c - 1); add_default_cell(repeated_validation); @@ -1578,8 +1577,8 @@ void ods_table_state::add_default_cell( int repeated) else if (!( current_table_column_ + repeated < current_covered_rows_[i].start_col || current_table_column_ > current_covered_rows_[i].start_col + current_covered_rows_[i].count_cols)) { - int c = current_table_column_; - int split = current_covered_rows_[i].start_col > current_table_column_ ? current_covered_rows_[i].start_col : + _INT32 c = current_table_column_; + _INT32 split = current_covered_rows_[i].start_col > current_table_column_ ? current_covered_rows_[i].start_col : current_covered_rows_[i].start_col + current_covered_rows_[i].count_cols; if (split != current_table_column_ && split != current_table_column_ + repeated) @@ -1609,7 +1608,7 @@ void ods_table_state::add_default_cell( int repeated) if (bSpanned) { - int spanned_rows = 0, spanned_cols = 0; + _INT32 spanned_rows = 0, spanned_cols = 0; if (cell && isSpannedCell(current_table_column_, current_table_row_, spanned_cols, spanned_rows)) { cell->attlist_extra_.table_number_columns_spanned_ = spanned_cols; @@ -1625,9 +1624,9 @@ void ods_table_state::add_default_cell( int repeated) state.row = current_table_row_; state.col = current_table_column_ + 1; - state.hyperlink_idx = is_cell_hyperlink(state.col, current_table_row_); - state.data_validation_name = validation_name; - state.comment_idx = comment_idx; + state.hyperlink_idx = is_cell_hyperlink(state.col, current_table_row_); + state.data_validation_idx = data_validation_idx; + state.comment_idx = comment_idx; cells_.push_back(state); diff --git a/OdfFile/Writer/Format/ods_table_state.h b/OdfFile/Writer/Format/ods_table_state.h index af32f5c59e..40f448afb3 100644 --- a/OdfFile/Writer/Format/ods_table_state.h +++ b/OdfFile/Writer/Format/ods_table_state.h @@ -52,9 +52,9 @@ namespace cpdoccore { struct oox_table_position { - int col; + _INT32 col; double col_off; - int row; + _INT32 row; double row_off; }; @@ -88,7 +88,7 @@ namespace utils else return std::wstring(1, (wchar_t)(L'A' + col)); } - static int getColAddressInv(const std::wstring & a_) + static _INT32 getColAddressInv(const std::wstring & a_) { std::wstring a = a_; XmlUtils::GetUpper(a); @@ -109,11 +109,11 @@ namespace utils } return res; } - static int getRowAdderssInv(const std::wstring & a_) + static _INT32 getRowAdderssInv(const std::wstring & a_) { if (!a_.empty()) { - return boost::lexical_cast(a_) - 1; + return boost::lexical_cast<_INT32>(a_) - 1; } else return 0; @@ -138,7 +138,7 @@ namespace utils std::reverse(col.begin(), col.end()); std::reverse(row.begin(), row.end()); } - static void parsing_ref (std::wstring ref, int & col, int & row) + static void parsing_ref (std::wstring ref, _INT32& col, _INT32& row) { if (std::wstring::npos != ref.find(L" ")) return; @@ -170,32 +170,43 @@ namespace utils struct ods_element_state { ods_element_state(){} - ods_element_state(office_element_ptr &elm_, unsigned int repeated_, const std::wstring &style_name_, office_element_ptr &style_elm_, double size_, size_t level_) - : elm(elm_), repeated(repeated_), style_name(style_name_), style_elm(style_elm_), size(size_), level(level_) + ods_element_state(office_element_ptr &elm_, _UINT32 repeated_, const std::wstring &style_name_, office_element_ptr &style_elm_, size_t level_) + : elm(elm_), repeated(repeated_), style_name(style_name_), style_elm(style_elm_), level(level_) {} office_element_ptr elm; - unsigned int repeated = 1; + _UINT32 repeated = 1; std::wstring style_name; office_element_ptr style_elm; - double size = 0; - - size_t level = 1; - + _UINT32 level = 1; +}; +struct ods_column_state : ods_element_state +{ + ods_column_state(office_element_ptr& elm_, _UINT32 repeated_, const std::wstring& style_name_, office_element_ptr& style_elm_, double size_, size_t level_) + { + elm = elm_; + repeated = repeated_; + style_name = style_name_; + style_elm = style_elm_; + size = size_; + level = level_; + } + double size = 0; std::wstring cell_style_name; }; +typedef ods_column_state ods_row_state; struct ods_cell_state : ods_element_state { - int col = -1; - int row = -1; + _INT32 col = -1; + _INT32 row = -1; - int hyperlink_idx = -1; - int comment_idx = -1; + _INT32 hyperlink_idx = -1; + _INT32 comment_idx = -1; - std::wstring data_validation_name; + _INT32 data_validation_idx = -1; bool empty = true; }; @@ -203,16 +214,16 @@ struct ods_cell_state : ods_element_state struct ods_hyperlink_state { std::wstring ref; - int col = -1; - int row = -1; + _INT32 col = -1; + _INT32 row = -1; std::wstring link; bool bLocation = false; }; struct ods_comment_state { - int col = -1; - int row = -1; + _INT32 col = -1; + _INT32 row = -1; std::wstring author; office_element_ptr elm; @@ -223,12 +234,12 @@ struct ods_comment_state }; struct ods_shared_formula_state { - unsigned int index; + _UINT32 index; std::wstring formula; std::wstring ref; - int base_column; - int base_row; + _INT32 base_column; + _INT32 base_row; int moving_type; //1 - col, 2 - row }; @@ -243,13 +254,13 @@ struct table_part_state std::wstring name; std::wstring ref; - int col_start = 0; - int row_start = 0; + _INT32 col_start = 0; + _INT32 row_start = 0; - int col_end = 0; - int row_end = 0; + _INT32 col_end = 0; + _INT32 row_end = 0; - bool in_ref(int col, int row) + bool in_ref(_INT32 col, _INT32 row) { return (col >= col_start && col <= col_end && row >= row_start && row <= row_end); } @@ -267,34 +278,34 @@ struct data_validation_state struct _ref { std::wstring ref; - int col_start = 0; - int row_start = 0; + _INT32 col_start = 0; + _INT32 row_start = 0; - int col_end = 0; - int row_end = 0; + _INT32 col_end = 0; + _INT32 row_end = 0; }; std::vector<_ref> refs; std::wstring condition; - bool in_ref(int col, int row, unsigned int repeate_col, _ref & ref) + bool in_ref(_INT32 col, _INT32 row, _UINT32 repeate_col, _ref & ref) { for (size_t i = 0; i < refs.size(); i++) { if (row < refs[i].row_start || row > refs[i].row_end) continue; - if (col + (int)repeate_col <= refs[i].col_start || col > refs[i].col_end) continue; + if (col + (_INT32)repeate_col <= refs[i].col_start || col > refs[i].col_end) continue; ref = refs[i]; return true; } return false; } - bool in_row(int row, unsigned int repeate_row, _ref & ref) + bool in_row(_INT32 row, _UINT32 repeate_row, _ref & ref) { for (size_t i = 0; i < refs.size(); i++) { - if (row + (int)repeate_row <= refs[i].row_start || row > refs[i].row_end) continue; + if (row + (_INT32)repeate_row <= refs[i].row_start || row > refs[i].row_end) continue; ref = refs[i]; return true; @@ -318,7 +329,7 @@ public: void set_table_master_page(std::wstring name); void set_table_rtl(bool Val); void set_table_tab_color(_CP_OPT(odf_types::color) & _color); - void set_table_dimension(int col, int row); + void set_table_dimension(_INT32 col, _INT32 row); void set_table_print_ranges(const std::wstring &ranges); void set_table_protection(bool Val); @@ -329,39 +340,39 @@ public: void set_table_protection_unprotected_cells(bool Val); void set_table_protection_protected_cells(bool Val); - void add_column(office_element_ptr & elm, unsigned int repeated, office_element_ptr & style); + void add_column(office_element_ptr & elm, _UINT32 repeated, office_element_ptr & style); void set_column_width_sym(double width); void set_column_width(double width); void set_column_optimal_width(bool val); void set_column_hidden(bool val); void set_column_default_cell_style(std::wstring & style_name); - std::wstring get_column_default_cell_style(int column); + std::wstring get_column_default_cell_style(_INT32 column); - void add_row_break(int val); - void add_column_break(int val); + void add_row_break(_INT32 val); + void add_column_break(_INT32 val); void start_group(office_element_ptr & elm); void end_group(); - int current_level() {return (int)current_level_.size()-1;} + _INT32 current_level() {return (_INT32)current_level_.size() - 1;} void start_headers(office_element_ptr & elm); void end_headers(); - void add_row(office_element_ptr & elm, unsigned int repeated , office_element_ptr & style);//const std::wstring & StyleName, const std::wstring & defaultCellStyleName); + void add_row(office_element_ptr & elm, _UINT32 repeated , office_element_ptr & style);//const std::wstring & StyleName, const std::wstring & defaultCellStyleName); void set_row_hidden(bool Val); void set_row_optimal_height(bool val); void set_row_height(double height); void set_row_default_cell_style(std::wstring & style_name); void add_row_repeated(); - bool isSpannedCell(int col, int row, int &spanned_cols, int &spanned_rows ); - bool isCoveredCell(int col, int repeated_cols = 1); + bool isSpannedCell(_INT32 col, _INT32 row, _INT32 &spanned_cols, _INT32 &spanned_rows); + bool isCoveredCell(_INT32 col, _INT32 repeated_cols = 1); void start_cell(office_element_ptr & elm ,office_element_ptr & style); void end_cell(); - void add_default_cell(int repeated); + void add_default_cell(_INT32 repeated); void check_spanned_cells(); @@ -371,8 +382,8 @@ public: void set_cell_text(odf_text_context *text_context, bool cash_value = false); void set_cell_formula(std::wstring &formula); void set_cell_array_formula(std::wstring & formula, std::wstring ref); - void set_cell_spanned(int spanned_cols, int spanned_rows); - void add_or_find_cell_shared_formula(std::wstring & formula, std::wstring ref, int ind); + void set_cell_spanned(_INT32 spanned_cols, _INT32 spanned_rows); + void add_or_find_cell_shared_formula(std::wstring & formula, std::wstring ref, _INT32 ind); void start_cell_text(); void end_cell_text(); @@ -454,17 +465,17 @@ public: void end_sparkline_group(); void end_sparkline_groups(); /////////////////////////////// - void add_hyperlink(const std::wstring & ref,int col, int row, const std::wstring & link, const std::wstring & location); + void add_hyperlink(const std::wstring & ref, _INT32 col, _INT32 row, const std::wstring & link, const std::wstring & location); void add_definded_expression(office_element_ptr & elm); - void start_comment(int col, int row, std::wstring & author); + void start_comment(_INT32 col, _INT32 row, std::wstring & author); void set_comment_rect(double l, double t, double w, double h); void set_comment_visible(bool val); void set_comment_color(const std::wstring & color); void end_comment(odf_text_context *text_context); - void set_merge_cells(int start_col, int start_row, int end_col, int end_row); + void set_merge_cells(_INT32 start_col, _INT32 start_row, _INT32 end_col, _INT32 end_row); office_element_ptr & current_row_element(); office_element_ptr & current_cell_element(); @@ -473,13 +484,13 @@ public: bool is_cell_hyperlink(); bool is_cell_comment(); - int is_cell_hyperlink(int col, int row); - int is_cell_comment(int col, int row, unsigned int repeate_col = 1); - int is_row_comment(int row, int repeate_row = 1); - int is_row_validation(int row, int & repeate_row); - std::wstring is_cell_data_validation(int col, int row, unsigned int repeate_col, data_validation_state::_ref & ref); + _INT32 is_cell_hyperlink(_INT32 col, _INT32 row); + _INT32 is_cell_comment(_INT32 col, _INT32 row, _UINT32 repeate_col = 1); + _INT32 is_row_comment(_INT32 row, _INT32 repeate_row = 1); + _INT32 is_row_validation(_INT32 row, _INT32& repeate_row); + _INT32 is_cell_data_validation(_INT32 col, _INT32 row, _UINT32 repeate_col, data_validation_state::_ref & ref); - unsigned int get_last_row_repeated (); + _UINT32 get_last_row_repeated (); ods_hyperlink_state & current_hyperlink(); @@ -488,18 +499,18 @@ public: return table_parts_; } - int current_column() const; - int current_row() const; + _INT32 current_column() const; + _INT32 current_row() const; - int dimension_columns; - int dimension_row; + _INT32 dimension_columns; + _INT32 dimension_row; double defaut_column_width_sym_ = 0; double defaut_column_width_; double defaut_row_height_; - std::vector column_breaks_; - std::vector row_breaks_; + std::vector<_INT32> column_breaks_; + std::vector<_INT32> row_breaks_; void convert_position(oox_table_position & oox_pos, double & x, double & y); @@ -514,19 +525,19 @@ private: struct _spanned_info { - int spanned_cols = 0; - int spanned_rows = 0; - int state = 0; + _INT32 spanned_cols = 0; + _INT32 spanned_rows = 0; + _INT32 state = 0; }; struct _covered_info { - int start_col = 0; - int count_cols = 0; + _INT32 start_col = 0; + _INT32 count_cols = 0; - int count_rows = 0; // от текущей строки + _INT32 count_rows = 0; // от текущей строки }; std::vector<_covered_info> current_covered_rows_; - int current_covered_cols_; + _INT32 current_covered_cols_; odf_conversion_context *context_; @@ -536,24 +547,24 @@ private: std::wstring row_default_cell_style_name_; - static int current_table_column_; - static int current_table_row_; + static _INT32 current_table_column_; + static _INT32 current_table_row_; - static int tmp_column_; - static int tmp_row_; + static _INT32 tmp_column_; + static _INT32 tmp_row_; - std::vector columns_; - std::vector rows_; + std::vector columns_; + std::vector rows_; // row column - std::map> map_merged_cells; + std::map<_INT32, std::map<_INT32, _spanned_info>> map_merged_cells; std::vector current_level_;//постоянно меняющийся список уровней ("0-й элемент - сама таблица) std::vector cells_; std::vector hyperlinks_; - std::map shared_formulas_; + std::map<_UINT32, ods_shared_formula_state> shared_formulas_; std::map mapTabled; // for formula used ... perhaps