Commit 0e4c9ca5 authored by Sergey.Konovalov's avatar Sergey.Konovalov Committed by Alexander Trofimov

падение xlsx ячейка t="b" value="false"

git-svn-id: svn://fileserver/activex/AVS/Sources/TeamlabOffice/trunk/ServerComponents@64973 954022d7-b5bf-4e40-9824-e11837661b57
parent 928703b5
#pragma once
#pragma once
#ifndef OOX_XLSX_INCLUDE_H_
#define OOX_XLSX_INCLUDE_H_
......@@ -62,13 +62,13 @@ namespace OOX
bool Read(const CPath& oFilePath)
{
// "/_rels/.rels"
// Ищем "/_rels/.rels" и читаем все файлы по рельсам
OOX::CRels oRels( oFilePath / FILE_SEPARATOR_STR );
IFileContainer::Read( oRels, oFilePath, oFilePath );
//
// Выполняем дополнительные действия для более удобной работы с файлом
//
// Ищем основной документ
smart_ptr<OOX::File> pFile = Find(OOX::Spreadsheet::FileTypes::Workbook);
if (pFile.IsInit() && OOX::Spreadsheet::FileTypes::Workbook == pFile->type())
m_pWorkbook = (OOX::Spreadsheet::CWorkbook*)pFile.operator->();
......@@ -287,7 +287,7 @@ namespace OOX
pWorkbookView->m_oWindowHeight->SetValue(12585);
m_pWorkbook->m_oBookViews->m_arrItems.push_back(pWorkbookView);
}
// sheet,
//добавляем sheet, если нет ни одного
if (m_aWorksheets.empty())
{
OOX::Spreadsheet::CWorksheet* pWorksheet = new OOX::Spreadsheet::CWorksheet();
......@@ -330,7 +330,7 @@ namespace OOX
pSheet->m_oRid->SetValue(oRId.ToString());
m_pWorkbook->m_oSheets->m_arrItems.push_back(pSheet);
}
// font
//делаем так чтобы всегда были нулевые стили и первый font всегда имел шрифт и размер
if(NULL != m_pStyles )
{
//Fonts
......@@ -397,12 +397,12 @@ namespace OOX
pXfs->m_oNumFmtId->SetValue(0);
}
}
// <is> str sharedString
//переносим теги <is> и ячейки с типом str в sharedString
for (std::map<CString, CWorksheet*>::const_iterator it = m_aWorksheets.begin(); it != m_aWorksheets.end(); ++it)
{
PrepareWorksheet(it->second);
}
//todo iso 8601
//todo парсим даты в формате iso 8601
}
private:
void PrepareWorksheet(CWorksheet* pWorksheet)
......@@ -428,10 +428,10 @@ namespace OOX
if(NULL != pSi)
{
int nIndex = pSharedStrings->AddSi(pSi);
//
//меняем значение ячейки
pCell->m_oValue.Init();
pCell->m_oValue->m_sText.Format(_T("%d"), nIndex);
//
//меняем тип ячейки
pCell->m_oType.Init();
pCell->m_oType->SetValue(SimpleTypes::Spreadsheet::celltypeSharedString);
}
......@@ -444,22 +444,36 @@ namespace OOX
CString sValue;
if(pCell->m_oValue.IsInit())
sValue = pCell->m_oValue->ToString();
// SharedStrings
//добавляем в SharedStrings
CSi* pSi = new CSi();
CText* pText = new CText();
pText->m_sText = sValue;
pSi->m_arrItems.push_back(pText);
int nIndex = pSharedStrings->AddSi(pSi);
//
//меняем значение ячейки
pCell->m_oValue.Init();
pCell->m_oValue->m_sText.Format(_T("%d"), nIndex);
//
//меняем тип ячейки
if(SimpleTypes::Spreadsheet::celltypeStr == pCell->m_oType->GetValue())
{
pCell->m_oType.Init();
pCell->m_oType->SetValue(SimpleTypes::Spreadsheet::celltypeSharedString);
}
}
else if(SimpleTypes::Spreadsheet::celltypeBool == pCell->m_oType->GetValue())
{
//обычно пишется 1/0, но встречается, что пишут true/false
if(pCell->m_oValue.IsInit())
{
SimpleTypes::COnOff<> oOnOff;
oOnOff.FromString(pCell->m_oValue->ToString());
pCell->m_oValue.Init();
if(oOnOff.ToBool())
pCell->m_oValue->m_sText = _T("1");
else
pCell->m_oValue->m_sText = _T("0");
}
}
}
}
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment