diff --git a/ASCOfficeDocxFile2/DocWrapper/XlsxSerializer.cpp b/ASCOfficeDocxFile2/DocWrapper/XlsxSerializer.cpp index a49b462421..2857df57b2 100644 --- a/ASCOfficeDocxFile2/DocWrapper/XlsxSerializer.cpp +++ b/ASCOfficeDocxFile2/DocWrapper/XlsxSerializer.cpp @@ -1,4 +1,4 @@ -#include "XlsxSerializer.h" +#include "XlsxSerializer.h" #include "../../DesktopEditor/common/Directory.h" #include "../../DesktopEditor/common/File.h" @@ -25,35 +25,26 @@ namespace BinXlsxRW{ OOX::CPath pathMediaDir = sDstPath + FILE_SEPARATOR_STR + _T("xl") + FILE_SEPARATOR_STR + _T("media"); OOX::CPath pathEmbedDir = sDstPath + FILE_SEPARATOR_STR + _T("xl") + FILE_SEPARATOR_STR + _T("embeddings"); - // File Type ( , , ReadFile , ) - BYTE fileType; - UINT nCodePage; - WCHAR wcDelimiter; - BYTE saveFileType; - SerializeCommon::ReadFileType(sXmlOptions, fileType, nCodePage, wcDelimiter, saveFileType); + //создавать папку надо даже при сохранении в csv, потому что когда читаем из бинарника тему, она записывается в файл. + OOX::CPath pathXlDir = sDstPath + FILE_SEPARATOR_STR + _T("xl"); - if (c_oFileTypes::CSV != fileType) - { - OOX::CPath pathXlDir = sDstPath + FILE_SEPARATOR_STR + _T("xl"); + OOX::CPath pathThemeDir = pathXlDir + FILE_SEPARATOR_STR + OOX::FileTypes::Theme.DefaultDirectory().GetPath(); - OOX::CPath pathThemeDir = pathXlDir + FILE_SEPARATOR_STR + OOX::FileTypes::Theme.DefaultDirectory().GetPath(); - - OOX::CPath pathThemeFile = pathThemeDir + FILE_SEPARATOR_STR + OOX::FileTypes::Theme.DefaultFileName().GetPath(); - - OOX::CPath pathThemeThemeRelsDir = pathThemeDir + FILE_SEPARATOR_STR + _T("_rels"); + OOX::CPath pathThemeFile = pathThemeDir + FILE_SEPARATOR_STR + OOX::FileTypes::Theme.DefaultFileName().GetPath(); - NSDirectory::CreateDirectory(string2std_string(pathXlDir.GetPath())); - NSDirectory::CreateDirectory(string2std_string(pathThemeDir.GetPath())); - NSDirectory::CreateDirectory(string2std_string(pathThemeThemeRelsDir.GetPath())); - NSDirectory::CreateDirectory(string2std_string(pathMediaDir.GetPath())); - NSDirectory::CreateDirectory(string2std_string(pathEmbedDir.GetPath())); + OOX::CPath pathThemeThemeRelsDir = pathThemeDir + FILE_SEPARATOR_STR + _T("_rels"); - //Create Default Theme - { - Writers::DefaultThemeWriter oDefaultThemeWriter; - oDefaultThemeWriter.Write(pathThemeFile.GetPath()); - } - } + NSDirectory::CreateDirectory(string2std_string(pathXlDir.GetPath())); + NSDirectory::CreateDirectory(string2std_string(pathThemeDir.GetPath())); + NSDirectory::CreateDirectory(string2std_string(pathThemeThemeRelsDir.GetPath())); + NSDirectory::CreateDirectory(string2std_string(pathMediaDir.GetPath())); + NSDirectory::CreateDirectory(string2std_string(pathEmbedDir.GetPath())); + + //Create Default Theme + { + Writers::DefaultThemeWriter oDefaultThemeWriter; + oDefaultThemeWriter.Write(pathThemeFile.GetPath()); + } sMediaPath = pathMediaDir.GetPath(); sEmbedPath = pathEmbedDir.GetPath(); @@ -64,7 +55,7 @@ namespace BinXlsxRW{ oOfficeDrawingConverter.SetMediaDstPath(sMediaDir); oOfficeDrawingConverter.SetEmbedDstPath(sEmbedDir); - // + //папка с бинарников std::wstring strFileInDir = NSSystemPath::GetDirectoryName(string2std_string(sSrcFileName)); CString sFileInDir = strFileInDir.c_str(); @@ -99,17 +90,17 @@ namespace BinXlsxRW{ pFontPicker->SetEmbeddedFontsDirectory(m_sEmbeddedFontsDir); pEmbeddedFontsManager = pFontPicker->GetNativeCutter(); - // + //добавим мега шрифт pEmbeddedFontsManager->CheckFont(_T("Wingdings 3"), pFontManager); pEmbeddedFontsManager->CheckFont(_T("Arial"), pFontManager); - //pEmbeddedFontsManager - // + //pEmbeddedFontsManager добавляются все цифры + //для заголовков pEmbeddedFontsManager->CheckFont(_T("Calibri"), pFontManager); pEmbeddedFontsManager->CheckString(CString(_T("ABCDEFGHIJKLMNOPQRSTUVWXYZ"))); - // "#NULL!", "#DIV/0!"... + //дополнение для ошибок "#NULL!", "#DIV/0!"... pEmbeddedFontsManager->CheckString(CString(_T("#!/?"))); - // num id 0 49 + //дополнение для num форматов по умолчанию с id от 0 до 49 pEmbeddedFontsManager->CheckString(CString(_T(".%E+-():"))); } @@ -127,7 +118,7 @@ namespace BinXlsxRW{ bool CXlsxSerializer::loadChart(CString& sChartPath, NSBinPptxRW::CBinaryFileWriter& oBufferedStream, long& lDataSize) { bool bRes = false; - //todo oRootPath + //todo передать нормальный oRootPath OOX::CPath oRootPath; OOX::Spreadsheet::CChartSpace oChart(oRootPath, sChartPath); if(NULL != m_pExternalDrawingConverter) @@ -157,7 +148,7 @@ namespace BinXlsxRW{ { m_pExternalDrawingConverter->SetDstContentRels(); - // sThemePath bsFilename theme bsFilename + //получаем sThemePath из bsFilename предполагая что папка theme находится на уровень выше bsFilename CString sThemePath; CString sFilenameReverse = sFilepath;sFilenameReverse.MakeReverse(); diff --git a/XlsxSerializerCom/Writer/BinaryReader.h b/XlsxSerializerCom/Writer/BinaryReader.h index 3b5106e46e..620a23121d 100644 --- a/XlsxSerializerCom/Writer/BinaryReader.h +++ b/XlsxSerializerCom/Writer/BinaryReader.h @@ -1,4 +1,4 @@ -#ifndef BINARY_READER +#ifndef BINARY_READER #define BINARY_READER #include "../../Common/Base64.h" @@ -1633,7 +1633,7 @@ namespace BinXlsxRW { sSignature.ReleaseBuffer(); memcpy(pWriteBuffer + nSignatureSize, &length, nDataLengthSize); memcpy(pWriteBuffer + nSignatureSize + nDataLengthSize, pSourceBuffer, length); - // 0, Excel . + //пишем в конце 0, потому что при редактировании Excel меняет посление байты. memset(pWriteBuffer + nSignatureSize + nDataLengthSize + length, 0, nJunkSize); int nBase64BufferLen = Base64::Base64EncodeGetRequiredLength(nWriteBufferLength, Base64::B64_BASE64_FLAG_NONE); @@ -1644,7 +1644,7 @@ namespace BinXlsxRW { { std::wstring strGfxdata = NSFile::CUtf8Converter::GetUnicodeStringFromUTF8(pbBase64Buffer, nBase64BufferLen); sGfxdata = CString(strGfxdata.c_str()); - // Excel + //важно иначе при редактировании и сохранении в Excel перетирается sGfxdata.Append(_T("\r\n")); } RELEASEARRAYOBJECTS(pbBase64Buffer); @@ -2473,7 +2473,7 @@ namespace BinXlsxRW { int res = c_oSerConstants::ReadOk; if(c_oSer_DrawingType::Chart2 == type) { - // rels + //создаем папку для rels OOX::CPath pathChartsDir = m_sDestinationDir + FILE_SEPARATOR_STR + _T("xl") + FILE_SEPARATOR_STR + _T("charts"); OOX::CSystemUtility::CreateDirectories(pathChartsDir.GetPath()); @@ -2693,7 +2693,7 @@ namespace BinXlsxRW { { OOX::Spreadsheet::CCell* pCell = new OOX::Spreadsheet::CCell(); res = Read1(length, &BinaryWorksheetsTableReader::ReadCell, this, pCell); - // error + //текст error и формул пишем if(NULL != m_pSharedStrings && pCell->m_oType.IsInit() && pCell->m_oValue.IsInit()) { SimpleTypes::Spreadsheet::ECellTypeType eCellType = pCell->m_oType->GetValue(); @@ -2900,7 +2900,7 @@ namespace BinXlsxRW { res = Read1(length, &BinaryOtherTableReader::ReadMediaContent, this, poResult); else if(c_oSer_OtherType::Theme == type) { - CString sThemePath;sThemePath.Format(_T("%ls/%ls"), m_oSaveParams.sThemePath, OOX::FileTypes::Theme.DefaultFileName().GetPath()); + CString sThemePath = m_oSaveParams.sThemePath + FILE_SEPARATOR_STR + OOX::FileTypes::Theme.DefaultFileName().GetPath(); long nCurPos = m_oBufferedStream.GetPos(); m_pOfficeDrawingConverter->SaveThemeXml(nCurPos, length, sThemePath); m_oBufferedStream.Seek(nCurPos + length); @@ -2963,7 +2963,7 @@ namespace BinXlsxRW { sImageSrc = m_sFileInDir + _T("media/") + sImage; } } - // + //Проверяем что файл существует FILE* pFileNative = oFile.GetFileNative(); if(NULL != pFileNative) { @@ -3039,7 +3039,7 @@ namespace BinXlsxRW { oFile.ReadFile(pBase64Data, oFile.GetFileSize(), nBase64DataSize); oFile.CloseFile(); - // + //проверяем формат bool bValidFormat = false; CString sSignature(g_sFormatSignature); int nSigLength = sSignature.GetLength(); @@ -3053,7 +3053,7 @@ namespace BinXlsxRW { } if(bValidFormat) { - // base64 + //Читаем из файла версию и длину base64 int nIndex = nSigLength; int nType = 0; CStringA version = ""; @@ -3105,9 +3105,9 @@ namespace BinXlsxRW { WCHAR wcDelimiter; BYTE saveFileType; SerializeCommon::ReadFileType(sXMLOptions, fileType, nCodePage, wcDelimiter, saveFileType); - // CSV , ( rels) . + // Делаем для CSV перебивку пути, иначе создается папка с одинаковым имеем (для rels) и файл не создается. if (BinXlsxRW::c_oFileTypes::CSV == fileType) - sDstPath += _T("Temp"); + sDstPath = NSSystemPath::GetDirectoryName(sDstPath); OOX::Spreadsheet::CXlsx oXlsx; SaveParams oSaveParams(sDstPath + FILE_SEPARATOR_STR + OOX::Spreadsheet::FileTypes::Workbook.DefaultDirectory().GetPath() + FILE_SEPARATOR_STR + OOX::FileTypes::Theme.DefaultDirectory().GetPath());