correct cell inserting

This commit is contained in:
RIMINMIR
2023-06-03 00:45:49 +06:00
parent e74d681589
commit fa6e1c41fe
3 changed files with 18 additions and 11 deletions

View File

@ -98,18 +98,15 @@ bool DigitReader::ReadDigit(const std::wstring &value, std::wstring &digit, std:
{
digit = std::to_wstring(dValue);
// Удаление лишних нулей после запятой
// Удаление лишних нулей после запятой
size_t dotPos = digit.find('.');
if (dotPos != std::wstring::npos)
{
size_t lastNonZeroPos = digit.find_last_not_of(L'0');
if (lastNonZeroPos <= dotPos)
{
digit.erase(lastNonZeroPos + 3);
}
digit.erase(lastNonZeroPos + 2);
}
data_format = createFractionFormat(digit, pEndPtr);
data_format = createFractionFormat(digit, pEndPtr);
for (size_t i = 0; i < postfix.size(); ++i)
{
data_format += std::wstring(L"\\") + postfix[i];

View File

@ -124,6 +124,11 @@ bool CompareCells(const OOX::Spreadsheet::CCell *a, const OOX::Spreadsheet::CCel
return *a->m_oCol < *b->m_oCol;
}
bool CompareColumns(const OOX::Spreadsheet::CCell *a, const OOX::Spreadsheet::CCell *b)
{
return *a->m_oCol == *b->m_oCol;
}
_UINT32 XLSXTableController::addRow(OOX::Spreadsheet::CRow *pRow, OOX::Spreadsheet::CWorksheet *pWorkSheet, INT nRow)
{
if (pWorkSheet->m_oSheetData->m_arrItems.size() > 1048576)
@ -134,9 +139,12 @@ _UINT32 XLSXTableController::addRow(OOX::Spreadsheet::CRow *pRow, OOX::Spreadshe
pRow->m_oR->SetValue(nRow);
/// сортируем ячейки в ряду
if(pRow->m_arrItems.size() > 2)
if(pRow->m_arrItems.size() > 1)
{
std::sort(pRow->m_arrItems.begin(), pRow->m_arrItems.end(), CompareCells);
std::sort(pRow->m_arrItems.begin(), pRow->m_arrItems.end(), CompareCells);
// Удаляем дубликаты с помощью алгоритма unique
auto it = std::unique(pRow->m_arrItems.begin(), pRow->m_arrItems.end(), CompareColumns);
pRow->m_arrItems.erase(it, pRow->m_arrItems.end());
}
pWorkSheet->m_oSheetData->m_arrItems.push_back(pRow);

View File

@ -110,10 +110,12 @@ void XMLConverter::ConvertXml(XLSXTableController &table)
{
table.AddCell(data_.at(i).at(nodeCount), rowNumber, colNames_->GetColumnNumber(i));
}
for( auto i : writingRows_.at(nodeCount)->attributes)
if(elderNode != writingRows_.at(nodeCount))
{
table.AddCell(data_.at(i).at(nodeCount), rowNumber, colNames_->GetColumnNumber(i));
for( auto i : writingRows_.at(nodeCount)->attributes)
{
table.AddCell(data_.at(i).at(nodeCount), rowNumber, colNames_->GetColumnNumber(i));
}
}
std::set<std::wstring> writedColumns = {};