mirror of
https://github.com/tfussell/xlnt.git
synced 2024-03-22 13:11:17 +08:00
work out how to handle worksheet rels during streaming parsing
This commit is contained in:
parent
a9fd6b064e
commit
72b8bd6b67
|
@ -115,6 +115,7 @@ public:
|
|||
void open(std::istream &stream);
|
||||
|
||||
private:
|
||||
std::vector<std::string> worksheet_queue_;
|
||||
std::unique_ptr<detail::xlsx_consumer> consumer_;
|
||||
std::unique_ptr<workbook> workbook_;
|
||||
};
|
||||
|
|
|
@ -108,7 +108,7 @@ std::vector<std::uint8_t> decrypt_xlsx_agile(
|
|||
++segment;
|
||||
}
|
||||
|
||||
decrypted_package.resize(total_size);
|
||||
decrypted_package.resize(static_cast<std::size_t>(total_size));
|
||||
|
||||
return decrypted_package;
|
||||
}
|
||||
|
@ -153,7 +153,8 @@ encryption_info::standard_encryption_info read_standard_encryption_info(std::ist
|
|||
throw xlnt::exception("invalid header");
|
||||
}
|
||||
|
||||
const auto csp_name_length = (header_length - (info_stream.tellg() - index_at_start)) / 2;
|
||||
const auto csp_name_length = static_cast<std::size_t>((header_length
|
||||
- (info_stream.tellg() - index_at_start)) / 2);
|
||||
auto csp_name = xlnt::detail::read_string<char16_t>(info_stream, csp_name_length);
|
||||
csp_name.pop_back(); // remove extraneous trailing null
|
||||
if (csp_name != u"Microsoft Enhanced RSA and AES Cryptographic Provider (Prototype)"
|
||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -82,16 +82,6 @@ private:
|
|||
/// </summary>
|
||||
cell read_cell();
|
||||
|
||||
/// <summary>
|
||||
/// Ends reading of the current worksheet in the workbook and optionally
|
||||
/// returns a worksheet object corresponding to the worksheet with the title
|
||||
/// returned by begin_worksheet(). An exception will be thrown if this is
|
||||
/// not open as a streaming consumer.
|
||||
/// </summary>
|
||||
worksheet end_worksheet();
|
||||
|
||||
bool has_worksheet();
|
||||
|
||||
/// <summary>
|
||||
/// Read all the files needed from the XLSX archive and initialize all of
|
||||
/// the data in the workbook to match.
|
||||
|
@ -198,27 +188,27 @@ private:
|
|||
/// <summary>
|
||||
/// xl/sheets/*.xml
|
||||
/// </summary>
|
||||
void read_chartsheet(const std::string &title);
|
||||
void read_chartsheet(const std::string &rel_id);
|
||||
|
||||
/// <summary>
|
||||
/// xl/sheets/*.xml
|
||||
/// </summary>
|
||||
void read_dialogsheet(const std::string &title);
|
||||
void read_dialogsheet(const std::string &rel_id);
|
||||
|
||||
/// <summary>
|
||||
/// xl/sheets/*.xml
|
||||
/// </summary>
|
||||
void read_worksheet(const std::string &title);
|
||||
void read_worksheet(const std::string &rel_id);
|
||||
|
||||
/// <summary>
|
||||
/// xl/sheets/*.xml
|
||||
/// </summary>
|
||||
std::string read_worksheet_begin();
|
||||
std::string read_worksheet_begin(const std::string &rel_id);
|
||||
|
||||
/// <summary>
|
||||
/// xl/sheets/*.xml
|
||||
/// </summary>
|
||||
void read_worksheet_end();
|
||||
worksheet read_worksheet_end(const std::string &rel_id);
|
||||
|
||||
// Sheet Relationship Target Parts
|
||||
|
||||
|
@ -411,13 +401,9 @@ private:
|
|||
|
||||
bool preserve_space_ = false;
|
||||
|
||||
std::vector<relationship> worksheet_queue_;
|
||||
|
||||
detail::cell_impl *stream_cell_;
|
||||
|
||||
detail::worksheet_impl *stream_worksheet_;
|
||||
|
||||
bool in_sheet_data_;
|
||||
};
|
||||
|
||||
} // namespace detail
|
||||
|
|
|
@ -103,17 +103,20 @@ cell streaming_workbook_reader::read_cell()
|
|||
|
||||
bool streaming_workbook_reader::has_worksheet()
|
||||
{
|
||||
return consumer_->has_worksheet();
|
||||
return !worksheet_queue_.empty();
|
||||
}
|
||||
|
||||
std::string streaming_workbook_reader::begin_worksheet()
|
||||
{
|
||||
return consumer_->read_worksheet_begin();
|
||||
auto next_worksheet_rel = worksheet_queue_.back();
|
||||
return consumer_->read_worksheet_begin(next_worksheet_rel);
|
||||
}
|
||||
|
||||
worksheet streaming_workbook_reader::end_worksheet()
|
||||
{
|
||||
return consumer_->end_worksheet();
|
||||
auto next_worksheet_rel = worksheet_queue_.back();
|
||||
worksheet_queue_.pop_back();
|
||||
return consumer_->read_worksheet_end(next_worksheet_rel);
|
||||
}
|
||||
|
||||
void streaming_workbook_reader::open(const std::vector<std::uint8_t> &data)
|
||||
|
|
Loading…
Reference in New Issue
Block a user