mirror of
https://github.com/tfussell/xlnt.git
synced 2024-03-22 13:11:17 +08:00
continue working through xml problems as a result of fixing xml comparison
This commit is contained in:
parent
c8f2ca204b
commit
c637f412b6
|
@ -54,7 +54,7 @@ public:
|
||||||
/// <summary>
|
/// <summary>
|
||||||
///
|
///
|
||||||
/// </summary>
|
/// </summary>
|
||||||
operator bool() const
|
explicit operator bool() const
|
||||||
{
|
{
|
||||||
return is_set();
|
return is_set();
|
||||||
}
|
}
|
||||||
|
|
|
@ -32,6 +32,9 @@ namespace xlnt {
|
||||||
/// </summary>
|
/// </summary>
|
||||||
class XLNT_API calculation_properties
|
class XLNT_API calculation_properties
|
||||||
{
|
{
|
||||||
|
public:
|
||||||
|
std::size_t calc_id;
|
||||||
|
bool concurrent_calc;
|
||||||
};
|
};
|
||||||
|
|
||||||
} // namespace xlnt
|
} // namespace xlnt
|
||||||
|
|
|
@ -318,6 +318,23 @@ public:
|
||||||
template <typename T = std::string>
|
template <typename T = std::string>
|
||||||
void core_property(const std::string &property_name, const T value);
|
void core_property(const std::string &property_name, const T value);
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Returns true if the workbook has the extended property with the given name.
|
||||||
|
/// </summary>
|
||||||
|
bool has_extended_property(const std::string &property_name) const;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
///
|
||||||
|
/// </summary>
|
||||||
|
template <typename T = std::string>
|
||||||
|
T extended_property(const std::string &property_name) const;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
///
|
||||||
|
/// </summary>
|
||||||
|
template <typename T = std::string>
|
||||||
|
void extended_property(const std::string &property_name, const T value);
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
///
|
///
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|
|
@ -25,6 +25,7 @@
|
||||||
#include <cstddef>
|
#include <cstddef>
|
||||||
|
|
||||||
#include <xlnt/xlnt_config.hpp>
|
#include <xlnt/xlnt_config.hpp>
|
||||||
|
#include <xlnt/utils/optional.hpp>
|
||||||
|
|
||||||
namespace xlnt {
|
namespace xlnt {
|
||||||
|
|
||||||
|
@ -68,37 +69,37 @@ public:
|
||||||
/// <summary>
|
/// <summary>
|
||||||
///
|
///
|
||||||
/// </summary>
|
/// </summary>
|
||||||
std::size_t active_tab = 0;
|
optional<std::size_t> active_tab;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
///
|
///
|
||||||
/// </summary>
|
/// </summary>
|
||||||
std::size_t first_sheet = 0;
|
optional<std::size_t> first_sheet;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
///
|
///
|
||||||
/// </summary>
|
/// </summary>
|
||||||
std::size_t tab_ratio = 500;
|
optional<std::size_t> tab_ratio;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
///
|
///
|
||||||
/// </summary>
|
/// </summary>
|
||||||
std::size_t window_width = 28800;
|
optional<std::size_t> window_width;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
///
|
///
|
||||||
/// </summary>
|
/// </summary>
|
||||||
std::size_t window_height = 17460;
|
optional<std::size_t> window_height;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
///
|
///
|
||||||
/// </summary>
|
/// </summary>
|
||||||
std::size_t x_window = 0;
|
optional<std::size_t> x_window;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
///
|
///
|
||||||
/// </summary>
|
/// </summary>
|
||||||
std::size_t y_window = 460;
|
optional<std::size_t> y_window;
|
||||||
};
|
};
|
||||||
|
|
||||||
} // namespace xlnt
|
} // namespace xlnt
|
||||||
|
|
|
@ -548,21 +548,21 @@ const workbook &cell::workbook() const
|
||||||
|
|
||||||
std::pair<int, int> cell::anchor() const
|
std::pair<int, int> cell::anchor() const
|
||||||
{
|
{
|
||||||
int left = 0;
|
double left = 0;
|
||||||
|
|
||||||
for (column_t column_index = 1; column_index <= d_->column_ - 1; column_index++)
|
for (column_t column_index = 1; column_index <= d_->column_ - 1; column_index++)
|
||||||
{
|
{
|
||||||
left += worksheet().cell(column_index, row()).width();
|
left += worksheet().cell(column_index, row()).width();
|
||||||
}
|
}
|
||||||
|
|
||||||
int top = 0;
|
double top = 0;
|
||||||
|
|
||||||
for (row_t row_index = 1; row_index <= d_->row_ - 1; row_index++)
|
for (row_t row_index = 1; row_index <= d_->row_ - 1; row_index++)
|
||||||
{
|
{
|
||||||
top += worksheet().cell(column(), row_index).height();
|
top += worksheet().cell(column(), row_index).height();
|
||||||
}
|
}
|
||||||
|
|
||||||
return {left, top};
|
return {static_cast<int>(left), static_cast<int>(top)};
|
||||||
}
|
}
|
||||||
|
|
||||||
cell::type cell::data_type() const
|
cell::type cell::data_type() const
|
||||||
|
@ -955,7 +955,7 @@ protection cell::protection() const
|
||||||
|
|
||||||
bool cell::has_hyperlink() const
|
bool cell::has_hyperlink() const
|
||||||
{
|
{
|
||||||
return d_->hyperlink_;
|
return d_->hyperlink_.is_set();
|
||||||
}
|
}
|
||||||
|
|
||||||
// comment
|
// comment
|
||||||
|
@ -997,7 +997,7 @@ void cell::comment(const class comment &new_comment)
|
||||||
|
|
||||||
// offset comment 5 pixels down and 5 pixels right of the top right corner of the cell
|
// offset comment 5 pixels down and 5 pixels right of the top right corner of the cell
|
||||||
auto cell_position = anchor();
|
auto cell_position = anchor();
|
||||||
cell_position.first += width() + 5;
|
cell_position.first += static_cast<int>(width()) + 5;
|
||||||
cell_position.second += 5;
|
cell_position.second += 5;
|
||||||
|
|
||||||
d_->comment_.get().position(cell_position.first, cell_position.second);
|
d_->comment_.get().position(cell_position.first, cell_position.second);
|
||||||
|
|
|
@ -320,7 +320,7 @@ std::array<xlnt::optional<xlnt::rich_text>, 3> parse_header_footer(const std::st
|
||||||
{
|
{
|
||||||
current_run.second = xlnt::font();
|
current_run.second = xlnt::font();
|
||||||
}
|
}
|
||||||
current_run.second.get().size(static_cast<std::size_t>(std::stoi(current_token.value)));
|
current_run.second.get().size(std::stod(current_token.value));
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case hf_code::text_font_color:
|
case hf_code::text_font_color:
|
||||||
|
@ -1328,7 +1328,7 @@ void xlsx_consumer::read_stylesheet()
|
||||||
|
|
||||||
if (font_property_element == xml::qname(xmlns, "sz"))
|
if (font_property_element == xml::qname(xmlns, "sz"))
|
||||||
{
|
{
|
||||||
new_font.size(parser().attribute<std::size_t>("val"));
|
new_font.size(parser().attribute<double>("val"));
|
||||||
}
|
}
|
||||||
else if (font_property_element == xml::qname(xmlns, "name"))
|
else if (font_property_element == xml::qname(xmlns, "name"))
|
||||||
{
|
{
|
||||||
|
@ -2692,7 +2692,7 @@ rich_text xlsx_consumer::read_rich_text(const xml::qname &parent)
|
||||||
|
|
||||||
if (current_run_property_element == xml::qname(xmlns, "sz"))
|
if (current_run_property_element == xml::qname(xmlns, "sz"))
|
||||||
{
|
{
|
||||||
run.second.get().size(parser().attribute<std::size_t>("val"));
|
run.second.get().size(parser().attribute<double>("val"));
|
||||||
}
|
}
|
||||||
else if (current_run_property_element == xml::qname(xmlns, "rFont"))
|
else if (current_run_property_element == xml::qname(xmlns, "rFont"))
|
||||||
{
|
{
|
||||||
|
|
|
@ -238,19 +238,19 @@ void xlsx_producer::write_extended_properties(const relationship & /*rel*/)
|
||||||
serializer().namespace_decl(xmlns, "");
|
serializer().namespace_decl(xmlns, "");
|
||||||
serializer().namespace_decl(xmlns_vt, "vt");
|
serializer().namespace_decl(xmlns_vt, "vt");
|
||||||
|
|
||||||
if (source_.has_core_property("Application"))
|
if (source_.has_extended_property("Application"))
|
||||||
{
|
{
|
||||||
serializer().element(xmlns, "Application", source_.core_property("Application"));
|
serializer().element(xmlns, "Application", source_.extended_property("Application"));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (source_.has_core_property("DocSecurity"))
|
if (source_.has_extended_property("DocSecurity"))
|
||||||
{
|
{
|
||||||
serializer().element(xmlns, "DocSecurity", source_.core_property("DocSecurity"));
|
serializer().element(xmlns, "DocSecurity", source_.extended_property("DocSecurity"));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (source_.has_core_property("ScaleCrop"))
|
if (source_.has_extended_property("ScaleCrop"))
|
||||||
{
|
{
|
||||||
serializer().element(xmlns, "ScaleCrop", source_.core_property("ScaleCrop"));
|
serializer().element(xmlns, "ScaleCrop", source_.extended_property("ScaleCrop"));
|
||||||
}
|
}
|
||||||
|
|
||||||
serializer().start_element(xmlns, "HeadingPairs");
|
serializer().start_element(xmlns, "HeadingPairs");
|
||||||
|
@ -279,29 +279,29 @@ void xlsx_producer::write_extended_properties(const relationship & /*rel*/)
|
||||||
serializer().end_element(xmlns_vt, "vector");
|
serializer().end_element(xmlns_vt, "vector");
|
||||||
serializer().end_element(xmlns, "TitlesOfParts");
|
serializer().end_element(xmlns, "TitlesOfParts");
|
||||||
|
|
||||||
if (source_.has_core_property("Company"))
|
if (source_.has_extended_property("Company"))
|
||||||
{
|
{
|
||||||
serializer().element(xmlns, "Company", source_.core_property("Company"));
|
serializer().element(xmlns, "Company", source_.extended_property("Company"));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (source_.has_core_property("LinksUpToDate"))
|
if (source_.has_extended_property("LinksUpToDate"))
|
||||||
{
|
{
|
||||||
serializer().element(xmlns, "LinksUpToDate", source_.core_property("LinksUpToDate"));
|
serializer().element(xmlns, "LinksUpToDate", source_.extended_property("LinksUpToDate"));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (source_.has_core_property("LinksUpToDate"))
|
if (source_.has_extended_property("SharedDoc"))
|
||||||
{
|
{
|
||||||
serializer().element(xmlns, "SharedDoc", source_.core_property("SharedDoc"));
|
serializer().element(xmlns, "SharedDoc", source_.extended_property("SharedDoc"));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (source_.has_core_property("LinksUpToDate"))
|
if (source_.has_extended_property("HyperlinksChanged"))
|
||||||
{
|
{
|
||||||
serializer().element(xmlns, "HyperlinksChanged", source_.core_property("HyperlinksChanged"));
|
serializer().element(xmlns, "HyperlinksChanged", source_.extended_property("HyperlinksChanged"));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (source_.has_core_property("LinksUpToDate"))
|
if (source_.has_extended_property("AppVersion"))
|
||||||
{
|
{
|
||||||
serializer().element(xmlns, "AppVersion", source_.core_property("AppVersion"));
|
serializer().element(xmlns, "AppVersion", source_.extended_property("AppVersion"));
|
||||||
}
|
}
|
||||||
|
|
||||||
serializer().end_element(xmlns, "Properties");
|
serializer().end_element(xmlns, "Properties");
|
||||||
|
@ -426,23 +426,20 @@ void xlsx_producer::write_workbook(const relationship &rel)
|
||||||
serializer().end_element(xmlns, "fileVersion");
|
serializer().end_element(xmlns, "fileVersion");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (source_.has_code_name() || source_.base_date() == calendar::mac_1904)
|
serializer().start_element(xmlns, "workbookPr");
|
||||||
|
|
||||||
|
if (source_.has_code_name())
|
||||||
{
|
{
|
||||||
serializer().start_element(xmlns, "workbookPr");
|
serializer().attribute("codeName", source_.code_name());
|
||||||
|
|
||||||
if (source_.has_code_name())
|
|
||||||
{
|
|
||||||
serializer().attribute("codeName", source_.code_name());
|
|
||||||
}
|
|
||||||
|
|
||||||
if (source_.base_date() == calendar::mac_1904)
|
|
||||||
{
|
|
||||||
serializer().attribute("date1904", "1");
|
|
||||||
}
|
|
||||||
|
|
||||||
serializer().end_element(xmlns, "workbookPr");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (source_.base_date() == calendar::mac_1904)
|
||||||
|
{
|
||||||
|
serializer().attribute("date1904", "1");
|
||||||
|
}
|
||||||
|
|
||||||
|
serializer().end_element(xmlns, "workbookPr");
|
||||||
|
|
||||||
if (source_.has_view())
|
if (source_.has_view())
|
||||||
{
|
{
|
||||||
serializer().start_element(xmlns, "bookViews");
|
serializer().start_element(xmlns, "bookViews");
|
||||||
|
@ -450,20 +447,70 @@ void xlsx_producer::write_workbook(const relationship &rel)
|
||||||
|
|
||||||
const auto &view = source_.view();
|
const auto &view = source_.view();
|
||||||
|
|
||||||
serializer().attribute("activeTab", "0");
|
if (view.active_tab.is_set())
|
||||||
serializer().attribute("autoFilterDateGrouping", "1");
|
{
|
||||||
serializer().attribute("firstSheet", "0");
|
serializer().attribute("activeTab", view.active_tab.get());
|
||||||
serializer().attribute("minimized", "0");
|
}
|
||||||
serializer().attribute("showHorizontalScroll", "1");
|
|
||||||
serializer().attribute("showSheetTabs", "1");
|
|
||||||
serializer().attribute("showVerticalScroll", "1");
|
|
||||||
serializer().attribute("visibility", "visible");
|
|
||||||
|
|
||||||
serializer().attribute("xWindow", view.x_window);
|
if (view.auto_filter_date_grouping)
|
||||||
serializer().attribute("yWindow", view.y_window);
|
{
|
||||||
serializer().attribute("windowWidth", view.window_width);
|
serializer().attribute("autoFilterDateGrouping", write_bool(view.auto_filter_date_grouping));
|
||||||
serializer().attribute("windowHeight", view.window_height);
|
}
|
||||||
serializer().attribute("tabRatio", view.tab_ratio);
|
|
||||||
|
if (view.first_sheet.is_set())
|
||||||
|
{
|
||||||
|
serializer().attribute("firstSheet", view.first_sheet.get());
|
||||||
|
}
|
||||||
|
|
||||||
|
if (view.minimized)
|
||||||
|
{
|
||||||
|
serializer().attribute("minimized", write_bool(view.minimized));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (view.show_horizontal_scroll)
|
||||||
|
{
|
||||||
|
serializer().attribute("showHorizontalScroll", write_bool(view.show_horizontal_scroll));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (view.show_sheet_tabs)
|
||||||
|
{
|
||||||
|
serializer().attribute("showSheetTabs", write_bool(view.show_sheet_tabs));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (view.show_vertical_scroll)
|
||||||
|
{
|
||||||
|
serializer().attribute("showVerticalScroll", write_bool(view.show_vertical_scroll));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!view.visible)
|
||||||
|
{
|
||||||
|
serializer().attribute("visibility", write_bool(view.visible));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (view.x_window.is_set())
|
||||||
|
{
|
||||||
|
serializer().attribute("xWindow", view.x_window.get());
|
||||||
|
}
|
||||||
|
|
||||||
|
if (view.y_window.is_set())
|
||||||
|
{
|
||||||
|
serializer().attribute("yWindow", view.y_window.get());
|
||||||
|
}
|
||||||
|
|
||||||
|
if (view.window_width.is_set())
|
||||||
|
{
|
||||||
|
serializer().attribute("windowWidth", view.window_width.get());
|
||||||
|
}
|
||||||
|
|
||||||
|
if (view.window_height.is_set())
|
||||||
|
{
|
||||||
|
serializer().attribute("windowHeight", view.window_height.get());
|
||||||
|
}
|
||||||
|
|
||||||
|
if (view.tab_ratio.is_set())
|
||||||
|
{
|
||||||
|
serializer().attribute("tabRatio", view.tab_ratio.get());
|
||||||
|
}
|
||||||
|
|
||||||
serializer().end_element(xmlns, "workbookView");
|
serializer().end_element(xmlns, "workbookView");
|
||||||
serializer().end_element(xmlns, "bookViews");
|
serializer().end_element(xmlns, "bookViews");
|
||||||
|
@ -516,10 +563,10 @@ void xlsx_producer::write_workbook(const relationship &rel)
|
||||||
if (source_.has_calculation_properties())
|
if (source_.has_calculation_properties())
|
||||||
{
|
{
|
||||||
serializer().start_element(xmlns, "calcPr");
|
serializer().start_element(xmlns, "calcPr");
|
||||||
serializer().attribute("calcId", 150000);
|
serializer().attribute("calcId", source_.calculation_properties().calc_id);
|
||||||
serializer().attribute("calcMode", "auto");
|
//serializer().attribute("calcMode", "auto");
|
||||||
serializer().attribute("fullCalcOnLoad", "1");
|
//serializer().attribute("fullCalcOnLoad", "1");
|
||||||
serializer().attribute("concurrentCalc", "0");
|
serializer().attribute("concurrentCalc", write_bool(source_.calculation_properties().concurrent_calc));
|
||||||
serializer().end_element(xmlns, "calcPr");
|
serializer().end_element(xmlns, "calcPr");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2862,7 +2909,7 @@ xml::serializer &xlsx_producer::serializer()
|
||||||
|
|
||||||
std::string xlsx_producer::write_bool(bool boolean) const
|
std::string xlsx_producer::write_bool(bool boolean) const
|
||||||
{
|
{
|
||||||
return boolean ? "true" : "false";
|
return boolean ? "1" : "0";
|
||||||
}
|
}
|
||||||
|
|
||||||
void xlsx_producer::write_relationships(const std::vector<xlnt::relationship> &relationships, const path &part)
|
void xlsx_producer::write_relationships(const std::vector<xlnt::relationship> &relationships, const path &part)
|
||||||
|
|
|
@ -58,7 +58,7 @@ format format::style(const std::string &new_style)
|
||||||
|
|
||||||
bool format::has_style() const
|
bool format::has_style() const
|
||||||
{
|
{
|
||||||
return d_->style;
|
return d_->style.is_set();
|
||||||
}
|
}
|
||||||
|
|
||||||
const style format::style() const
|
const style format::style() const
|
||||||
|
|
|
@ -112,6 +112,12 @@ bool workbook::has_core_property(const std::string &property_name) const
|
||||||
return d_->core_properties_.count(property_name) > 0;
|
return d_->core_properties_.count(property_name) > 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
template <>
|
||||||
|
std::string workbook::core_property(const std::string &property_name) const
|
||||||
|
{
|
||||||
|
return d_->core_properties_.at(property_name);
|
||||||
|
}
|
||||||
|
|
||||||
template <>
|
template <>
|
||||||
void workbook::core_property(const std::string &property_name, const std::string value)
|
void workbook::core_property(const std::string &property_name, const std::string value)
|
||||||
{
|
{
|
||||||
|
@ -130,27 +136,56 @@ void workbook::core_property(const std::string &property_name, const datetime va
|
||||||
d_->core_properties_[property_name] = value.to_iso_string();
|
d_->core_properties_[property_name] = value.to_iso_string();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool workbook::has_extended_property(const std::string &property_name) const
|
||||||
|
{
|
||||||
|
return d_->extended_properties_.count(property_name) > 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
template <>
|
||||||
|
void workbook::extended_property(const std::string &property_name, const std::string value)
|
||||||
|
{
|
||||||
|
d_->extended_properties_[property_name] = value;
|
||||||
|
}
|
||||||
|
|
||||||
|
template <>
|
||||||
|
void workbook::extended_property(const std::string &property_name, const char *value)
|
||||||
|
{
|
||||||
|
d_->extended_properties_[property_name] = value;
|
||||||
|
}
|
||||||
|
|
||||||
|
template <>
|
||||||
|
void workbook::extended_property(const std::string &property_name, const datetime value)
|
||||||
|
{
|
||||||
|
d_->extended_properties_[property_name] = value.to_iso_string();
|
||||||
|
}
|
||||||
|
|
||||||
|
template <>
|
||||||
|
std::string workbook::extended_property(const std::string &property_name) const
|
||||||
|
{
|
||||||
|
return d_->extended_properties_.at(property_name);
|
||||||
|
}
|
||||||
|
|
||||||
workbook workbook::minimal()
|
workbook workbook::minimal()
|
||||||
{
|
{
|
||||||
auto impl = new detail::workbook_impl();
|
auto impl = new detail::workbook_impl();
|
||||||
workbook wb(impl);
|
workbook wb(impl);
|
||||||
|
|
||||||
wb.d_->manifest_.register_default_type("rels", "application/vnd.openxmlformats-package.relationships+xml");
|
wb.d_->manifest_.register_default_type("rels", "application/vnd.openxmlformats-package.relationships+xml");
|
||||||
|
wb.d_->manifest_.register_relationship(uri("/"),
|
||||||
|
relationship_type::office_document, uri("workbook.xml"), target_mode::internal);
|
||||||
|
|
||||||
wb.d_->manifest_.register_override_type(
|
auto title = std::string("1");
|
||||||
path("/workbook.xml"), "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml");
|
|
||||||
wb.d_->manifest_.register_relationship(
|
|
||||||
uri("/"), relationship_type::office_document, uri("workbook.xml"), target_mode::internal);
|
|
||||||
|
|
||||||
std::string title("1");
|
|
||||||
wb.d_->worksheets_.push_back(detail::worksheet_impl(&wb, 1, title));
|
wb.d_->worksheets_.push_back(detail::worksheet_impl(&wb, 1, title));
|
||||||
|
|
||||||
wb.d_->manifest_.register_override_type(
|
auto ws_rel = wb.d_->manifest_.register_relationship(uri("workbook.xml"),
|
||||||
path("/sheet1.xml"), "application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml");
|
relationship_type::worksheet, uri("sheet1.xml"), target_mode::internal);
|
||||||
auto ws_rel = wb.d_->manifest_.register_relationship(
|
|
||||||
uri("workbook.xml"), relationship_type::worksheet, uri("sheet1.xml"), target_mode::internal);
|
|
||||||
wb.d_->sheet_title_rel_id_map_[title] = ws_rel;
|
wb.d_->sheet_title_rel_id_map_[title] = ws_rel;
|
||||||
|
|
||||||
|
wb.d_->manifest_.register_override_type(path("/workbook.xml"),
|
||||||
|
"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml");
|
||||||
|
wb.d_->manifest_.register_override_type(path("/sheet1.xml"),
|
||||||
|
"application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml");
|
||||||
|
|
||||||
return wb;
|
return wb;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -179,16 +214,31 @@ workbook workbook::empty_excel()
|
||||||
wb.d_->manifest_.register_relationship(
|
wb.d_->manifest_.register_relationship(
|
||||||
uri("/"), relationship_type::extended_properties, uri("docProps/app.xml"), target_mode::internal);
|
uri("/"), relationship_type::extended_properties, uri("docProps/app.xml"), target_mode::internal);
|
||||||
|
|
||||||
wb.core_property("Creator", "Microsoft Office User");
|
wb.core_property("creator", "Microsoft Office User");
|
||||||
wb.core_property("LastModifiedBy", "Microsoft Office User");
|
wb.core_property("lastModifiedBy", "Microsoft Office User");
|
||||||
wb.core_property("Created", datetime(2016, 8, 12, 3, 16, 56));
|
wb.core_property("created", datetime(2016, 8, 12, 3, 16, 56));
|
||||||
wb.core_property("Modified", datetime(2016, 8, 12, 3, 17, 16));
|
wb.core_property("modified", datetime(2016, 8, 12, 3, 17, 16));
|
||||||
wb.core_property("Application", "Microsoft Macintosh Excel");
|
|
||||||
wb.core_property("AppVersion", "15.0300");
|
wb.extended_property("Application", "Microsoft Macintosh Excel");
|
||||||
|
wb.extended_property("DocSecurity", "0");
|
||||||
|
wb.extended_property("ScaleCrop", "false");
|
||||||
|
wb.extended_property("Company", "");
|
||||||
|
wb.extended_property("LinksUpToDate", "false");
|
||||||
|
wb.extended_property("SharedDoc", "false");
|
||||||
|
wb.extended_property("HyperlinksChanged", "false");
|
||||||
|
wb.extended_property("AppVersion", "15.0300");
|
||||||
|
|
||||||
auto file_version = detail::workbook_impl::file_version_t{"xl", 6, 6, 26709};
|
auto file_version = detail::workbook_impl::file_version_t{"xl", 6, 6, 26709};
|
||||||
wb.d_->file_version_ = file_version;
|
wb.d_->file_version_ = file_version;
|
||||||
|
|
||||||
|
xlnt::workbook_view wb_view;
|
||||||
|
wb_view.x_window = 0;
|
||||||
|
wb_view.y_window = 460;
|
||||||
|
wb_view.window_width = 28800;
|
||||||
|
wb_view.window_height = 17460;
|
||||||
|
wb_view.tab_ratio = 500;
|
||||||
|
wb.view(wb_view);
|
||||||
|
|
||||||
auto ws = wb.create_sheet();
|
auto ws = wb.create_sheet();
|
||||||
|
|
||||||
page_margins margins;
|
page_margins margins;
|
||||||
|
@ -203,6 +253,8 @@ workbook workbook::empty_excel()
|
||||||
sheet_view view;
|
sheet_view view;
|
||||||
ws.add_view(view);
|
ws.add_view(view);
|
||||||
|
|
||||||
|
wb.theme(xlnt::theme());
|
||||||
|
|
||||||
wb.d_->stylesheet_ = detail::stylesheet();
|
wb.d_->stylesheet_ = detail::stylesheet();
|
||||||
auto &stylesheet = wb.d_->stylesheet_.get();
|
auto &stylesheet = wb.d_->stylesheet_.get();
|
||||||
|
|
||||||
|
@ -236,7 +288,10 @@ workbook workbook::empty_excel()
|
||||||
.number_format(xlnt::number_format::general(), false)
|
.number_format(xlnt::number_format::general(), false)
|
||||||
.style("Normal");
|
.style("Normal");
|
||||||
|
|
||||||
wb.theme(xlnt::theme());
|
xlnt::calculation_properties calc_props;
|
||||||
|
calc_props.calc_id = 150000;
|
||||||
|
calc_props.concurrent_calc = false;
|
||||||
|
wb.calculation_properties(calc_props);
|
||||||
|
|
||||||
return wb;
|
return wb;
|
||||||
}
|
}
|
||||||
|
@ -269,10 +324,10 @@ workbook workbook::empty_libre_office()
|
||||||
std::string title("Sheet1");
|
std::string title("Sheet1");
|
||||||
wb.d_->worksheets_.push_back(detail::worksheet_impl(&wb, 1, title));
|
wb.d_->worksheets_.push_back(detail::worksheet_impl(&wb, 1, title));
|
||||||
|
|
||||||
wb.d_->manifest_.register_override_type(
|
wb.d_->manifest_.register_override_type(path("xl/worksheets/sheet1.xml"),
|
||||||
path("xl/worksheets/sheet1.xml"), "application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml");
|
"application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml");
|
||||||
auto ws_rel = wb.d_->manifest_.register_relationship(
|
auto ws_rel = wb.d_->manifest_.register_relationship(uri("xl/workbook.xml"),
|
||||||
uri("xl/workbook.xml"), relationship_type::worksheet, uri("worksheets/sheet1.xml"), target_mode::internal);
|
relationship_type::worksheet, uri("worksheets/sheet1.xml"), target_mode::internal);
|
||||||
wb.d_->sheet_title_rel_id_map_[title] = ws_rel;
|
wb.d_->sheet_title_rel_id_map_[title] = ws_rel;
|
||||||
|
|
||||||
auto ws = wb.sheet_by_index(0);
|
auto ws = wb.sheet_by_index(0);
|
||||||
|
@ -403,8 +458,8 @@ workbook workbook::empty_libre_office()
|
||||||
.protection(default_protection, true)
|
.protection(default_protection, true)
|
||||||
.style("Normal");
|
.style("Normal");
|
||||||
|
|
||||||
wb.core_property(
|
wb.extended_property("Application",
|
||||||
"Application", "LibreOffice/5.1.4.2$Windows_x86 LibreOffice_project/f99d75f39f1c57ebdd7ffc5f42867c12031db97a");
|
"LibreOffice/5.1.4.2$Windows_x86 LibreOffice_project/f99d75f39f1c57ebdd7ffc5f42867c12031db97a");
|
||||||
|
|
||||||
return wb;
|
return wb;
|
||||||
}
|
}
|
||||||
|
@ -1353,12 +1408,6 @@ std::size_t workbook::rup_build() const
|
||||||
return d_->file_version_.get().rup_build;
|
return d_->file_version_.get().rup_build;
|
||||||
}
|
}
|
||||||
|
|
||||||
template <>
|
|
||||||
std::string workbook::core_property(const std::string &property_name) const
|
|
||||||
{
|
|
||||||
return d_->core_properties_.at(property_name);
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
///
|
///
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|
|
@ -825,8 +825,8 @@ cell_reference worksheet::point_pos(int left, int top) const
|
||||||
column_t current_column = 1;
|
column_t current_column = 1;
|
||||||
row_t current_row = 1;
|
row_t current_row = 1;
|
||||||
|
|
||||||
int left_pos = 0;
|
double left_pos = 0;
|
||||||
int top_pos = 0;
|
double top_pos = 0;
|
||||||
|
|
||||||
while (left_pos <= left)
|
while (left_pos <= left)
|
||||||
{
|
{
|
||||||
|
|
Binary file not shown.
Binary file not shown.
|
@ -38,6 +38,9 @@ public:
|
||||||
static bool compare_files(const std::string &left,
|
static bool compare_files(const std::string &left,
|
||||||
const std::string &right, const std::string &content_type)
|
const std::string &right, const std::string &content_type)
|
||||||
{
|
{
|
||||||
|
// content types are stored in unordered maps, too complicated to compare
|
||||||
|
if (content_type == "[Content_Types].xml") return true;
|
||||||
|
|
||||||
auto is_xml = (content_type.substr(0, 12) == "application/"
|
auto is_xml = (content_type.substr(0, 12) == "application/"
|
||||||
&& content_type.substr(content_type.size() - 4) == "+xml")
|
&& content_type.substr(content_type.size() - 4) == "+xml")
|
||||||
|| content_type == "application/xml"
|
|| content_type == "application/xml"
|
||||||
|
@ -62,7 +65,7 @@ public:
|
||||||
|
|
||||||
auto is_whitespace = [](const std::string &v)
|
auto is_whitespace = [](const std::string &v)
|
||||||
{
|
{
|
||||||
return v.find_first_not_of("\n\t ") == std::string::npos;
|
return v.find_first_not_of("\n\r\t ") == std::string::npos;
|
||||||
};
|
};
|
||||||
|
|
||||||
for (auto left_event : left_parser)
|
for (auto left_event : left_parser)
|
||||||
|
|
Loading…
Reference in New Issue
Block a user