mirror of
https://github.com/ONLYOFFICE/core.git
synced 2026-07-20 03:55:47 +08:00
correct cell inserting
This commit is contained in:
@ -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];
|
||||
|
||||
@ -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);
|
||||
|
||||
|
||||
@ -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 = {};
|
||||
|
||||
Reference in New Issue
Block a user