From 2a716579561406f2e16f3c198c06c5d02cbff7b9 Mon Sep 17 00:00:00 2001 From: GoshaZotov Date: Tue, 14 Jun 2022 11:22:01 +0300 Subject: [PATCH 1/2] [se] R1C1 fix saving --- cell/api.js | 28 ++++++++++++++++------------ 1 file changed, 16 insertions(+), 12 deletions(-) diff --git a/cell/api.js b/cell/api.js index ff7e2f26ff..c0929cfd1e 100644 --- a/cell/api.js +++ b/cell/api.js @@ -1182,22 +1182,26 @@ var editor; oAdditionalData["codepage"] = AscCommon.c_oAscCodePageUtf8; dataContainer.data = last.data; } else { + var t = this; if (c_oAscFileType.XLTX === fileType) { var title = this.documentTitle; - this.saveDocumentToZip(this.wb.model, AscCommon.c_oEditorId.Spreadsheet, function(data) { - if (!data) { - return; + AscCommonExcel.executeInR1C1Mode(false, function () { + t.saveDocumentToZip(t.wb.model, AscCommon.c_oEditorId.Spreadsheet, function(data) { + if (!data) { + return; + } + var blob = new Blob([data], {type: AscCommon.openXml.GetMimeType("xlsx")}); + var link = document.createElement("a"); + link.href = window.URL.createObjectURL(blob); + link.download = title; + link.click(); + }); + if (actionType) + { + t.sync_EndAction(c_oAscAsyncActionType.BlockInteraction, actionType); } - var blob = new Blob([data], {type: AscCommon.openXml.GetMimeType("xlsx")}); - var link = document.createElement("a"); - link.href = window.URL.createObjectURL(blob); - link.download = title; - link.click(); }); - if (actionType) - { - this.sync_EndAction(c_oAscAsyncActionType.BlockInteraction, actionType); - } + return true; } From 7e8533e00688b7e6fce513f75307232b7f40ed0f Mon Sep 17 00:00:00 2001 From: GoshaZotov Date: Tue, 14 Jun 2022 12:07:56 +0300 Subject: [PATCH 2/2] [se] R1C1 fix client open --- cell/api.js | 1307 +++++++++++++++++++++++++-------------------------- 1 file changed, 653 insertions(+), 654 deletions(-) diff --git a/cell/api.js b/cell/api.js index c0929cfd1e..b3f9c1ad03 100644 --- a/cell/api.js +++ b/cell/api.js @@ -1493,595 +1493,593 @@ var editor; return false; } xmlParserContext.zip = window.nativeZlibEngine; - var doc = new openXml.OpenXmlPackage(window.nativeZlibEngine, null); - - //core - var coreXmlPart = doc.getPartByRelationshipType(openXml.Types.coreFileProperties.relationType); - if (coreXmlPart) { - var contentCore = coreXmlPart.getDocumentContent(); - if (contentCore) { - wb.Core = new AscCommon.CCore(); - reader = new StaxParser(contentCore, coreXmlPart, xmlParserContext); - wb.Core.fromXml(reader, true); + + AscCommonExcel.executeInR1C1Mode(false, function () { + var doc = new openXml.OpenXmlPackage(window.nativeZlibEngine, null); + + //core + var coreXmlPart = doc.getPartByRelationshipType(openXml.Types.coreFileProperties.relationType); + if (coreXmlPart) { + var contentCore = coreXmlPart.getDocumentContent(); + if (contentCore) { + wb.Core = new AscCommon.CCore(); + reader = new StaxParser(contentCore, coreXmlPart, xmlParserContext); + wb.Core.fromXml(reader, true); + } } - } - //app - var appXmlPart = doc.getPartByRelationshipType(openXml.Types.extendedFileProperties.relationType); - if (appXmlPart) { - var contentApp = appXmlPart.getDocumentContent(); - if (contentApp) { - wb.App = new AscCommon.CApp(); - reader = new StaxParser(contentApp, appXmlPart, xmlParserContext); - wb.App.fromXml(reader, true); + //app + var appXmlPart = doc.getPartByRelationshipType(openXml.Types.extendedFileProperties.relationType); + if (appXmlPart) { + var contentApp = appXmlPart.getDocumentContent(); + if (contentApp) { + wb.App = new AscCommon.CApp(); + reader = new StaxParser(contentApp, appXmlPart, xmlParserContext); + wb.App.fromXml(reader, true); + } } - } - //workbook - wbPart = doc.getPartByRelationshipType(openXml.Types.workbook.relationType); - var contentWorkbook = wbPart.getDocumentContent(); - AscCommonExcel.executeInR1C1Mode(false, function () { + //workbook + wbPart = doc.getPartByRelationshipType(openXml.Types.workbook.relationType); + var contentWorkbook = wbPart.getDocumentContent(); wbXml = new AscCommonExcel.CT_Workbook(wb); var reader = new StaxParser(contentWorkbook, wbPart, xmlParserContext); wbXml.fromXml(reader); - }); - var reader, i, j; - if (this.isOpenOOXInBrowser) { - - //theme - var workbookThemePart = wbPart.getPartByRelationshipType(openXml.Types.theme.relationType); - if (workbookThemePart) { - var contentWorkbookTheme = workbookThemePart.getDocumentContent(); - var oTheme = new AscFormat.CTheme(); - reader = new StaxParser(contentWorkbookTheme, workbookThemePart, xmlParserContext); - oTheme.fromXml(reader, true); - wb.theme = oTheme; - } - xmlParserContext.InitOpenManager.initSchemeAndTheme(wb); - - //TODO oMediaArray - - //external reference - if (wbXml.externalReferences) { - wbXml.externalReferences.forEach(function (externalReference) { - if (null !== externalReference) { - var externalWorkbookPart = wbPart.getPartById(externalReference); - if (externalWorkbookPart) { - var contentExternalWorkbook = externalWorkbookPart.getDocumentContent(); - if (contentExternalWorkbook) { - var oExternalReference = new AscCommonExcel.CT_ExternalReference(wb); - var reader = new StaxParser(contentExternalWorkbook, externalWorkbookPart, xmlParserContext); - oExternalReference.fromXml(reader); - - //TODO id отличается от serialize - if (oExternalReference.val) { - if (oExternalReference.val.Id) { - oExternalReference.val.Id = externalReference; + + var reader, i, j; + if (t.isOpenOOXInBrowser) { + + //theme + var workbookThemePart = wbPart.getPartByRelationshipType(openXml.Types.theme.relationType); + if (workbookThemePart) { + var contentWorkbookTheme = workbookThemePart.getDocumentContent(); + var oTheme = new AscFormat.CTheme(); + reader = new StaxParser(contentWorkbookTheme, workbookThemePart, xmlParserContext); + oTheme.fromXml(reader, true); + wb.theme = oTheme; + } + xmlParserContext.InitOpenManager.initSchemeAndTheme(wb); + + //TODO oMediaArray + + //external reference + if (wbXml.externalReferences) { + wbXml.externalReferences.forEach(function (externalReference) { + if (null !== externalReference) { + var externalWorkbookPart = wbPart.getPartById(externalReference); + if (externalWorkbookPart) { + var contentExternalWorkbook = externalWorkbookPart.getDocumentContent(); + if (contentExternalWorkbook) { + var oExternalReference = new AscCommonExcel.CT_ExternalReference(wb); + var reader = new StaxParser(contentExternalWorkbook, externalWorkbookPart, xmlParserContext); + oExternalReference.fromXml(reader); + + //TODO id отличается от serialize + if (oExternalReference.val) { + if (oExternalReference.val.Id) { + oExternalReference.val.Id = externalReference; + } + wb.externalReferences.push(oExternalReference.val); } - wb.externalReferences.push(oExternalReference.val); } } } - } - }); - } + }); + } - //extLxt(slicercache inside) - if (wbXml.extLst) { - wbXml.extLst.forEach(function (ext) { - if (ext.slicerCachesIds) { - ext.slicerCachesIds.forEach(function (slicerCacheId) { - if (null !== slicerCacheId) { - var slicerCacheWorkbookPart = wbPart.getPartById(slicerCacheId); - if (slicerCacheWorkbookPart) { - var contentSlicerCache = slicerCacheWorkbookPart.getDocumentContent(); - if (contentSlicerCache) { - var oSlicerCacheDefinition = new Asc.CT_slicerCacheDefinition(); - var reader = new StaxParser(contentSlicerCache, slicerCacheWorkbookPart, xmlParserContext); - oSlicerCacheDefinition.fromXml(reader); - - xmlParserContext.InitOpenManager.oReadResult.slicerCaches[oSlicerCacheDefinition.name] = oSlicerCacheDefinition; + //extLxt(slicercache inside) + if (wbXml.extLst) { + wbXml.extLst.forEach(function (ext) { + if (ext.slicerCachesIds) { + ext.slicerCachesIds.forEach(function (slicerCacheId) { + if (null !== slicerCacheId) { + var slicerCacheWorkbookPart = wbPart.getPartById(slicerCacheId); + if (slicerCacheWorkbookPart) { + var contentSlicerCache = slicerCacheWorkbookPart.getDocumentContent(); + if (contentSlicerCache) { + var oSlicerCacheDefinition = new Asc.CT_slicerCacheDefinition(); + var reader = new StaxParser(contentSlicerCache, slicerCacheWorkbookPart, xmlParserContext); + oSlicerCacheDefinition.fromXml(reader); + + xmlParserContext.InitOpenManager.oReadResult.slicerCaches[oSlicerCacheDefinition.name] = oSlicerCacheDefinition; + } } } - } - }); - } - }); - } + }); + } + }); + } - //not ext slicer caches - if (wbXml.slicerCachesIds) { - wbXml.slicerCachesIds.forEach(function (slicerCacheId) { - if (null !== slicerCacheId) { - var slicerCacheWorkbookPart = wbPart.getPartById(slicerCacheId); - if (slicerCacheWorkbookPart) { - var contentSlicerCache = slicerCacheWorkbookPart.getDocumentContent(); - if (contentSlicerCache) { - var oSlicerCacheDefinition = new Asc.CT_slicerCacheDefinition(); - var reader = new StaxParser(contentSlicerCache, slicerCacheWorkbookPart, xmlParserContext); - oSlicerCacheDefinition.fromXml(reader); - - xmlParserContext.InitOpenManager.oReadResult.slicerCaches[oSlicerCacheDefinition.name] = oSlicerCacheDefinition; + //not ext slicer caches + if (wbXml.slicerCachesIds) { + wbXml.slicerCachesIds.forEach(function (slicerCacheId) { + if (null !== slicerCacheId) { + var slicerCacheWorkbookPart = wbPart.getPartById(slicerCacheId); + if (slicerCacheWorkbookPart) { + var contentSlicerCache = slicerCacheWorkbookPart.getDocumentContent(); + if (contentSlicerCache) { + var oSlicerCacheDefinition = new Asc.CT_slicerCacheDefinition(); + var reader = new StaxParser(contentSlicerCache, slicerCacheWorkbookPart, xmlParserContext); + oSlicerCacheDefinition.fromXml(reader); + + xmlParserContext.InitOpenManager.oReadResult.slicerCaches[oSlicerCacheDefinition.name] = oSlicerCacheDefinition; + } } } - } - }); - } - - //connection - //пока читаю в строку connections. в serialize сейчас аналогично не парсим структуру, а храним в виде массива байтов - var connectionsPart = wbPart.getPartByRelationshipType(openXml.Types.connections.relationType); - if (connectionsPart) { - wb.connections = connectionsPart.getDocumentContent(); - } + }); + } - //styles - var dxfs = []; - var aCellXfs = []; - var stylesPart = wbPart.getPartByRelationshipType(openXml.Types.styles.relationType); - if (stylesPart) { - var contentStyles = stylesPart.getDocumentContent(); - if (contentStyles) { - var styleSheet = new AscCommonExcel.CT_Stylesheet(new Asc.CTableStyles()); - reader = new StaxParser(contentStyles, stylesPart, xmlParserContext); - styleSheet.fromXml(reader); - - - var oStyleObject = { - aBorders: styleSheet.borders, - aFills: styleSheet.fills, - aFonts: styleSheet.fonts, - oNumFmts: styleSheet.numFmts, - aCellStyleXfs: styleSheet.cellStyleXfs, - aCellXfs: styleSheet.cellXfs, - aDxfs: styleSheet.dxfs, - aExtDxfs: styleSheet.aExtDxfs, - aCellStyles: styleSheet.cellStyles, - oCustomTableStyles: styleSheet.tableStyles.CustomStyles, - oCustomSlicerStyles: styleSheet.oCustomSlicerStyles - }; + //connection + //пока читаю в строку connections. в serialize сейчас аналогично не парсим структуру, а храним в виде массива байтов + var connectionsPart = wbPart.getPartByRelationshipType(openXml.Types.connections.relationType); + if (connectionsPart) { + wb.connections = connectionsPart.getDocumentContent(); + } - xmlParserContext.InitOpenManager.InitStyleManager(oStyleObject, aCellXfs); - dxfs = oStyleObject.aDxfs; - wb.oNumFmtsOpen = oStyleObject.oNumFmts; + //styles + var dxfs = []; + var aCellXfs = []; + var stylesPart = wbPart.getPartByRelationshipType(openXml.Types.styles.relationType); + if (stylesPart) { + var contentStyles = stylesPart.getDocumentContent(); + if (contentStyles) { + var styleSheet = new AscCommonExcel.CT_Stylesheet(new Asc.CTableStyles()); + reader = new StaxParser(contentStyles, stylesPart, xmlParserContext); + styleSheet.fromXml(reader); + + + var oStyleObject = { + aBorders: styleSheet.borders, + aFills: styleSheet.fills, + aFonts: styleSheet.fonts, + oNumFmts: styleSheet.numFmts, + aCellStyleXfs: styleSheet.cellStyleXfs, + aCellXfs: styleSheet.cellXfs, + aDxfs: styleSheet.dxfs, + aExtDxfs: styleSheet.aExtDxfs, + aCellStyles: styleSheet.cellStyles, + oCustomTableStyles: styleSheet.tableStyles.CustomStyles, + oCustomSlicerStyles: styleSheet.oCustomSlicerStyles + }; + + xmlParserContext.InitOpenManager.InitStyleManager(oStyleObject, aCellXfs); + dxfs = oStyleObject.aDxfs; + wb.oNumFmtsOpen = oStyleObject.oNumFmts; + } } - } - xmlParserContext.InitOpenManager.aCellXfs = aCellXfs; - xmlParserContext.InitOpenManager.Dxfs = dxfs; - - //jsaProject - var jsaProjectPart = wbPart.getPartByRelationshipType(openXml.Types.jsaProject.relationType); - if (jsaProjectPart) { - var contentJsaProject = jsaProjectPart.getDocumentContent(); - if (contentJsaProject) { - xmlParserContext.InitOpenManager.oReadResult.macros = contentJsaProject; + xmlParserContext.InitOpenManager.aCellXfs = aCellXfs; + xmlParserContext.InitOpenManager.Dxfs = dxfs; + + //jsaProject + var jsaProjectPart = wbPart.getPartByRelationshipType(openXml.Types.jsaProject.relationType); + if (jsaProjectPart) { + var contentJsaProject = jsaProjectPart.getDocumentContent(); + if (contentJsaProject) { + xmlParserContext.InitOpenManager.oReadResult.macros = contentJsaProject; + } } - } - //vbaProject - var vbaProjectPart = wbPart.getPartByRelationshipType(openXml.Types.vbaProject.relationType); - if (vbaProjectPart) { - var contentVbaProject = vbaProjectPart.getDocumentContent(true); - if (contentVbaProject) { - xmlParserContext.InitOpenManager.oReadResult.vbaMacros = contentVbaProject; + //vbaProject + var vbaProjectPart = wbPart.getPartByRelationshipType(openXml.Types.vbaProject.relationType); + if (vbaProjectPart) { + var contentVbaProject = vbaProjectPart.getDocumentContent(true); + if (contentVbaProject) { + xmlParserContext.InitOpenManager.oReadResult.vbaMacros = contentVbaProject; + } } - } - //person list - var personListPart = wbPart.getPartByRelationshipType(openXml.Types.person.relationType); - if (personListPart) { - var contentPersonList = personListPart.getDocumentContent(); - if (contentPersonList) { - var personList = new AscCommonExcel.CT_PersonList(); - reader = new StaxParser(contentPersonList, personListPart, xmlParserContext); - personList.fromXml(reader); + //person list + var personListPart = wbPart.getPartByRelationshipType(openXml.Types.person.relationType); + if (personListPart) { + var contentPersonList = personListPart.getDocumentContent(); + if (contentPersonList) { + var personList = new AscCommonExcel.CT_PersonList(); + reader = new StaxParser(contentPersonList, personListPart, xmlParserContext); + personList.fromXml(reader); + } } - } - //wb comments - //лежит в виде бинарника, читаем через serialize - var workbookComment = wbPart.getPartByRelationshipType(openXml.Types.workbookComment.relationType); - if (workbookComment) { - var contentWorkbookComment = workbookComment.getDocumentContent(true); - if (contentWorkbookComment) { - AscCommonExcel.ReadWbComments(wb, contentWorkbookComment, xmlParserContext.InitOpenManager); + //wb comments + //лежит в виде бинарника, читаем через serialize + var workbookComment = wbPart.getPartByRelationshipType(openXml.Types.workbookComment.relationType); + if (workbookComment) { + var contentWorkbookComment = workbookComment.getDocumentContent(true); + if (contentWorkbookComment) { + AscCommonExcel.ReadWbComments(wb, contentWorkbookComment, xmlParserContext.InitOpenManager); + } } } - } - //pivotCaches - if (wbXml.pivotCaches) { - wbXml.pivotCaches.forEach(function (wbPivotCacheXml) { - var pivotTableCacheDefinitionPart; - if (null !== wbPivotCacheXml.cacheId && null !== wbPivotCacheXml.id) { - pivotTableCacheDefinitionPart = wbPart.getPartById(wbPivotCacheXml.id); - var contentCacheDefinition = pivotTableCacheDefinitionPart.getDocumentContent(); - if (contentCacheDefinition) { - var pivotTableCacheDefinition = new Asc.CT_PivotCacheDefinition(); - AscCommonExcel.executeInR1C1Mode(false, function () { + //pivotCaches + if (wbXml.pivotCaches) { + wbXml.pivotCaches.forEach(function (wbPivotCacheXml) { + var pivotTableCacheDefinitionPart; + if (null !== wbPivotCacheXml.cacheId && null !== wbPivotCacheXml.id) { + pivotTableCacheDefinitionPart = wbPart.getPartById(wbPivotCacheXml.id); + var contentCacheDefinition = pivotTableCacheDefinitionPart.getDocumentContent(); + if (contentCacheDefinition) { + var pivotTableCacheDefinition = new Asc.CT_PivotCacheDefinition(); + new openXml.SaxParserBase().parse(contentCacheDefinition, pivotTableCacheDefinition); - }); - if (pivotTableCacheDefinition.isValidCacheSource()) { - pivotCaches[wbPivotCacheXml.cacheId] = pivotTableCacheDefinition; - if (pivotTableCacheDefinition.id) { - var partPivotTableCacheRecords = pivotTableCacheDefinitionPart.getPartById(pivotTableCacheDefinition.id); - var contentCacheRecords = partPivotTableCacheRecords.getDocumentContent(); - if (contentCacheRecords) { - AscCommonExcel.executeInR1C1Mode(false, function () { + + if (pivotTableCacheDefinition.isValidCacheSource()) { + pivotCaches[wbPivotCacheXml.cacheId] = pivotTableCacheDefinition; + if (pivotTableCacheDefinition.id) { + var partPivotTableCacheRecords = pivotTableCacheDefinitionPart.getPartById(pivotTableCacheDefinition.id); + var contentCacheRecords = partPivotTableCacheRecords.getDocumentContent(); + if (contentCacheRecords) { var pivotTableCacheRecords = new Asc.CT_PivotCacheRecords(); new openXml.SaxParserBase().parse(contentCacheRecords, pivotTableCacheRecords); pivotTableCacheDefinition.cacheRecords = pivotTableCacheRecords; - }); + } } } } } - } - }); - } + }); + } - //sharedString - if (this.isOpenOOXInBrowser) { - var sharedStringPart = wbPart.getPartByRelationshipType(openXml.Types.sharedStringTable.relationType); - if (sharedStringPart) { - var contentSharedStrings = sharedStringPart.getDocumentContent(); - if (contentSharedStrings) { - var sharedStrings = new AscCommonExcel.CT_SharedStrings(); - reader = new StaxParser(contentSharedStrings, sharedStringPart, xmlParserContext); - sharedStrings.fromXml(reader); + //sharedString + if (t.isOpenOOXInBrowser) { + var sharedStringPart = wbPart.getPartByRelationshipType(openXml.Types.sharedStringTable.relationType); + if (sharedStringPart) { + var contentSharedStrings = sharedStringPart.getDocumentContent(); + if (contentSharedStrings) { + var sharedStrings = new AscCommonExcel.CT_SharedStrings(); + reader = new StaxParser(contentSharedStrings, sharedStringPart, xmlParserContext); + sharedStrings.fromXml(reader); + } } } - } - //TODO CalcChain - из бинарника не читается, и не пишется в бинарник. реализовать позже + //TODO CalcChain - из бинарника не читается, и не пишется в бинарник. реализовать позже - //Custom xml - if (this.isOpenOOXInBrowser) { - //папка customXml, в неё лежат item[n].xml, itemProps[n].xml + rels + //Custom xml + if (t.isOpenOOXInBrowser) { + //папка customXml, в неё лежат item[n].xml, itemProps[n].xml + rels - //в Content_Types пишется только ссылка на itemProps в слудующем виде: - // + //в Content_Types пишется только ссылка на itemProps в слудующем виде: + // - //rels(которые внутри customXml) лежит ссылка на itemProps в следующем виде: - // + //rels(которые внутри customXml) лежит ссылка на itemProps в следующем виде: + // - //workbook.xml.rels лежит ссылка на item в следующем виде: - // + //workbook.xml.rels лежит ссылка на item в следующем виде: + // - //TODO проверить когда несколько ссылок на customXml - var customXmlParts = wbPart.getPartsByRelationshipType(openXml.Types.customXml.relationType); - if (customXmlParts) { - for (var i = 0; i < customXmlParts.length; i++) { - var customXmlPart = customXmlParts[i]; - var customXml = customXmlPart.getDocumentContent("string"); - var customXmlPropsPart = customXmlPart.getPartByRelationshipType(openXml.Types.customXmlProps.relationType); - var customXmlProps = customXmlPropsPart && customXmlPropsPart.getDocumentContent("string"); + //TODO проверить когда несколько ссылок на customXml + var customXmlParts = wbPart.getPartsByRelationshipType(openXml.Types.customXml.relationType); + if (customXmlParts) { + for (var i = 0; i < customXmlParts.length; i++) { + var customXmlPart = customXmlParts[i]; + var customXml = customXmlPart.getDocumentContent("string"); + var customXmlPropsPart = customXmlPart.getPartByRelationshipType(openXml.Types.customXmlProps.relationType); + var customXmlProps = customXmlPropsPart && customXmlPropsPart.getDocumentContent("string"); - //в бинарник не будем писать, для совместимости оставляю поля, добавляю ещё новые - var custom = {Uri: [], ItemId: null, Content: null, item: customXml, itemProps: customXmlProps}; - if (!wb.customXmls) { - wb.customXmls = []; + //в бинарник не будем писать, для совместимости оставляю поля, добавляю ещё новые + var custom = {Uri: [], ItemId: null, Content: null, item: customXml, itemProps: customXmlProps}; + if (!wb.customXmls) { + wb.customXmls = []; + } + wb.customXmls.push(custom); } - wb.customXmls.push(custom); } } - } - //sheets - if (this.isOpenOOXInBrowser && wbXml.sheets) { - var wsParts = []; + //sheets + if (t.isOpenOOXInBrowser && wbXml.sheets) { + var wsParts = []; - //вначале беру все листы, потом запрашиваю контент каждого из них. - //связано с проблемой внтури парсера, на примере файла Read_Only_part_of_lists.xlsx - wbXml.sheets.forEach(function (wbSheetXml) { - if (null !== wbSheetXml.id && wbSheetXml.name) { - var wsPart = wbPart.getPartById(wbSheetXml.id); - wsParts.push({wsPart: wsPart, id: wbSheetXml.id, name: wbSheetXml.name, bHidden: wbSheetXml.bHidden, sheetId: wbSheetXml.sheetId}); - } - }); + //вначале беру все листы, потом запрашиваю контент каждого из них. + //связано с проблемой внтури парсера, на примере файла Read_Only_part_of_lists.xlsx + wbXml.sheets.forEach(function (wbSheetXml) { + if (null !== wbSheetXml.id && wbSheetXml.name) { + var wsPart = wbPart.getPartById(wbSheetXml.id); + wsParts.push({wsPart: wsPart, id: wbSheetXml.id, name: wbSheetXml.name, bHidden: wbSheetXml.bHidden, sheetId: wbSheetXml.sheetId}); + } + }); - wsParts.forEach(function (wbSheetXml) { - if (null !== wbSheetXml.id && wbSheetXml.name) { - var wsPart = wbSheetXml.wsPart; - var contentSheetXml = wsPart && wsPart.getDocumentContent(); - if (contentSheetXml) { - var ws = new AscCommonExcel.Worksheet(wb, wb.aWorksheets.length); - ws.sName = wbSheetXml.name; - if (null !== wbSheetXml.bHidden) { - ws.bHidden = wbSheetXml.bHidden; - } - //var wsView = new AscCommonExcel.asc_CSheetViewSettings(); - //wsView.pane = new AscCommonExcel.asc_CPane(); - //ws.sheetViews.push(wsView); + wsParts.forEach(function (wbSheetXml) { + if (null !== wbSheetXml.id && wbSheetXml.name) { + var wsPart = wbSheetXml.wsPart; + var contentSheetXml = wsPart && wsPart.getDocumentContent(); if (contentSheetXml) { - AscCommonExcel.executeInR1C1Mode(false, function () { + var ws = new AscCommonExcel.Worksheet(wb, wb.aWorksheets.length); + ws.sName = wbSheetXml.name; + if (null !== wbSheetXml.bHidden) { + ws.bHidden = wbSheetXml.bHidden; + } + //var wsView = new AscCommonExcel.asc_CSheetViewSettings(); + //wsView.pane = new AscCommonExcel.asc_CPane(); + //ws.sheetViews.push(wsView); + if (contentSheetXml) { var reader = new StaxParser(contentSheetXml, wsPart, xmlParserContext); ws.fromXml(reader); - }); - } - - xmlParserContext.InitOpenManager.putSheetAfterRead(wb, ws); - xmlParserContext.InitOpenManager.oReadResult.sheetIds[wbSheetXml.sheetId] = ws; - - var drawingPart = wsPart.getPartById(xmlParserContext.drawingId); - if (drawingPart) { - var drawingWS = new AscCommonExcel.CT_DrawingWS(ws); - var contentDrawing = drawingPart.getDocumentContent(); - reader = new StaxParser(contentDrawing, drawingPart, xmlParserContext); - drawingWS.fromXml(reader); - let aSpTree = []; - for(let nDrawing = 0; nDrawing < ws.Drawings.length; ++nDrawing) { - aSpTree.push(ws.Drawings[nDrawing].graphicObject); } - reader.context.assignConnectors(aSpTree); - } - if (wsPart) { - //pivot - var pivotParts = wsPart.getPartsByRelationshipType(openXml.Types.pivotTable.relationType); - for (i = 0; i < pivotParts.length; ++i) { - var contentPivotTable = pivotParts[i].getDocumentContent(); - var pivotTable = new Asc.CT_pivotTableDefinition(true); - new openXml.SaxParserBase().parse(contentPivotTable, pivotTable); - var cacheDefinition = pivotCaches[pivotTable.cacheId]; - if (cacheDefinition) { - pivotTable.cacheDefinition = cacheDefinition; - ws.insertPivotTable(pivotTable); + + xmlParserContext.InitOpenManager.putSheetAfterRead(wb, ws); + xmlParserContext.InitOpenManager.oReadResult.sheetIds[wbSheetXml.sheetId] = ws; + + var drawingPart = wsPart.getPartById(xmlParserContext.drawingId); + if (drawingPart) { + var drawingWS = new AscCommonExcel.CT_DrawingWS(ws); + var contentDrawing = drawingPart.getDocumentContent(); + reader = new StaxParser(contentDrawing, drawingPart, xmlParserContext); + drawingWS.fromXml(reader); + let aSpTree = []; + for(let nDrawing = 0; nDrawing < ws.Drawings.length; ++nDrawing) { + aSpTree.push(ws.Drawings[nDrawing].graphicObject); } + reader.context.assignConnectors(aSpTree); } - - //tables - var tableParts = wsPart.getPartsByRelationshipType(openXml.Types.tableDefinition.relationType); - for (i = 0; i < tableParts.length; ++i) { - var contentTable = tableParts[i].getDocumentContent(); - var oNewTable = ws.createTablePart(); - reader = new StaxParser(contentTable, oNewTable, xmlParserContext); - oNewTable.fromXml(reader); - - var queryTables = tableParts[i].getPartsByRelationshipType(openXml.Types.queryTable.relationType); - for (j = 0; j < queryTables.length; ++j) { - var contentQueryTable = queryTables[j].getDocumentContent(); - var oNewQueryTable = new AscCommonExcel.QueryTable(); - reader = new StaxParser(contentQueryTable, oNewQueryTable, xmlParserContext); - oNewQueryTable.fromXml(reader); - oNewTable.QueryTable = oNewQueryTable; + if (wsPart) { + //pivot + var pivotParts = wsPart.getPartsByRelationshipType(openXml.Types.pivotTable.relationType); + for (i = 0; i < pivotParts.length; ++i) { + var contentPivotTable = pivotParts[i].getDocumentContent(); + var pivotTable = new Asc.CT_pivotTableDefinition(true); + new openXml.SaxParserBase().parse(contentPivotTable, pivotTable); + var cacheDefinition = pivotCaches[pivotTable.cacheId]; + if (cacheDefinition) { + pivotTable.cacheDefinition = cacheDefinition; + ws.insertPivotTable(pivotTable); + } } - if (null != oNewTable.Ref && null != oNewTable.DisplayName) { - ws.workbook.dependencyFormulas.addTableName(ws, oNewTable, true); - } - ws.TableParts.push(oNewTable); - } + //tables + var tableParts = wsPart.getPartsByRelationshipType(openXml.Types.tableDefinition.relationType); + for (i = 0; i < tableParts.length; ++i) { + var contentTable = tableParts[i].getDocumentContent(); + var oNewTable = ws.createTablePart(); + reader = new StaxParser(contentTable, oNewTable, xmlParserContext); + oNewTable.fromXml(reader); + + var queryTables = tableParts[i].getPartsByRelationshipType(openXml.Types.queryTable.relationType); + for (j = 0; j < queryTables.length; ++j) { + var contentQueryTable = queryTables[j].getDocumentContent(); + var oNewQueryTable = new AscCommonExcel.QueryTable(); + reader = new StaxParser(contentQueryTable, oNewQueryTable, xmlParserContext); + oNewQueryTable.fromXml(reader); + oNewTable.QueryTable = oNewQueryTable; + } - //namedSheetViews - var namedSheetViews = wsPart.getPartsByRelationshipType(openXml.Types.namedSheetViews.relationType); - for (i = 0; i < namedSheetViews.length; ++i) { - var contentSheetView = namedSheetViews[i].getDocumentContent(); - var namedSheetView = new Asc.CT_NamedSheetViews(); - reader = new StaxParser(contentSheetView, namedSheetView, xmlParserContext); - namedSheetView.fromXml(reader); - //связь с таблицыми по id осуществляется через tableIdOpen, который потом в методе initPostOpen преобразуется в tableId - ws.aNamedSheetViews = namedSheetView.namedSheetView; - } + if (null != oNewTable.Ref && null != oNewTable.DisplayName) { + ws.workbook.dependencyFormulas.addTableName(ws, oNewTable, true); + } + ws.TableParts.push(oNewTable); + } - //slicers - var slicers = wsPart.getPartsByRelationshipType(openXml.Types.slicers.relationType); - for (i = 0; i < slicers.length; ++i) { - var contentSlicers = slicers[i].getDocumentContent(); - var oSlicers = new Asc.CT_slicers(ws); - oSlicers.slicer = ws.aSlicers; - reader = new StaxParser(contentSlicers, oSlicers, xmlParserContext); - oSlicers.fromXml(reader); - } + //namedSheetViews + var namedSheetViews = wsPart.getPartsByRelationshipType(openXml.Types.namedSheetViews.relationType); + for (i = 0; i < namedSheetViews.length; ++i) { + var contentSheetView = namedSheetViews[i].getDocumentContent(); + var namedSheetView = new Asc.CT_NamedSheetViews(); + reader = new StaxParser(contentSheetView, namedSheetView, xmlParserContext); + namedSheetView.fromXml(reader); + //связь с таблицыми по id осуществляется через tableIdOpen, который потом в методе initPostOpen преобразуется в tableId + ws.aNamedSheetViews = namedSheetView.namedSheetView; + } - //COMMENTS - var m_mapComments = {}; - var PrepareComments = function () { - var pVmlDrawing = xmlParserContext.InitOpenManager.legacyDrawing; - if (!pVmlDrawing || !comments) { - return; + //slicers + var slicers = wsPart.getPartsByRelationshipType(openXml.Types.slicers.relationType); + for (i = 0; i < slicers.length; ++i) { + var contentSlicers = slicers[i].getDocumentContent(); + var oSlicers = new Asc.CT_slicers(ws); + oSlicers.slicer = ws.aSlicers; + reader = new StaxParser(contentSlicers, oSlicers, xmlParserContext); + oSlicers.fromXml(reader); } + //COMMENTS + var m_mapComments = {}; + var PrepareComments = function () { + var pVmlDrawing = xmlParserContext.InitOpenManager.legacyDrawing; + if (!pVmlDrawing || !comments) { + return; + } - var mapCheckCopyThreadedComments = []; - var arAuthors = comments.authors && comments.authors.arr; - var i, j, nRow, nCol, nAuthorId, pCommentItem; - if (comments.commentList) { - var aComments = comments.commentList.arr; + var mapCheckCopyThreadedComments = []; + var arAuthors = comments.authors && comments.authors.arr; - for (i = 0; i < aComments.length; ++i) { - var pComment = aComments[i]; - if (!pComment) { - continue; - } + var i, j, nRow, nCol, nAuthorId, pCommentItem; + if (comments.commentList) { + var aComments = comments.commentList.arr; + + for (i = 0; i < aComments.length; ++i) { + var pComment = aComments[i]; + if (!pComment) { + continue; + } - var bThreadedCommentCopy = false; - var pThreadedComment = null; - if (pThreadedComments) { - var pFind; - - var isPlaceholder = false; - if (pComment.authorId) { - nAuthorId = parseInt(pComment.authorId); - - if (nAuthorId >= 0 && nAuthorId < arAuthors.length) { - var sAuthor = arAuthors[nAuthorId]; - if ("tc=" === sAuthor.substring(0, 3)) { - isPlaceholder = true; - var sGUID = sAuthor.substr(3); - //todo IsZero() is added to fix comments with zero ids(5.4.0)(bug 42947). Remove after few releases - if ("{00000000-0000-0000-0000-000000000000}" === sGUID && pComment.ref) { - for (j in pThreadedComments.m_mapTopLevelThreadedComments) { - var it = pThreadedComments.m_mapTopLevelThreadedComments[j]; - if (it.ref && pComment.ref === it.ref) { - pFind = it; - break; + var bThreadedCommentCopy = false; + var pThreadedComment = null; + if (pThreadedComments) { + var pFind; + + var isPlaceholder = false; + if (pComment.authorId) { + nAuthorId = parseInt(pComment.authorId); + + if (nAuthorId >= 0 && nAuthorId < arAuthors.length) { + var sAuthor = arAuthors[nAuthorId]; + if ("tc=" === sAuthor.substring(0, 3)) { + isPlaceholder = true; + var sGUID = sAuthor.substr(3); + //todo IsZero() is added to fix comments with zero ids(5.4.0)(bug 42947). Remove after few releases + if ("{00000000-0000-0000-0000-000000000000}" === sGUID && pComment.ref) { + for (j in pThreadedComments.m_mapTopLevelThreadedComments) { + var it = pThreadedComments.m_mapTopLevelThreadedComments[j]; + if (it.ref && pComment.ref === it.ref) { + pFind = it; + break; + } } + } else { + pFind = pThreadedComments.m_mapTopLevelThreadedComments[sGUID]; } - } else { - pFind = pThreadedComments.m_mapTopLevelThreadedComments[sGUID]; - } + } } } - } - if (pFind) { - pThreadedComment = pFind; - if (mapCheckCopyThreadedComments[pThreadedComment.id]) { - bThreadedCommentCopy = true; - } else { - mapCheckCopyThreadedComments[pThreadedComment.id + ""] = 1; + if (pFind) { + pThreadedComment = pFind; + if (mapCheckCopyThreadedComments[pThreadedComment.id]) { + bThreadedCommentCopy = true; + } else { + mapCheckCopyThreadedComments[pThreadedComment.id + ""] = 1; + } + } else if (isPlaceholder) { + continue; } - } else if (isPlaceholder) { - continue; } - } - if (pComment.ref && pComment.authorId) { - var sRef = AscCommonExcel.g_oRangeCache.getAscRange(pComment.ref); - if (sRef) { - nRow = sRef.r1; - nCol = sRef.c1; - pCommentItem = new Asc.asc_CCommentData(); - pCommentItem.asc_putDocumentFlag(false); - pCommentItem.nRow = nRow; - pCommentItem.nCol = nCol; - - //TODO флаг всегда будет false - /*if (pCommentItem.asc_getDocumentFlag()) { - pCommentItem.nId = "doc_" + (this.wb.aComments.length + 1); - } else { - pCommentItem.wsId = ws.Id; - pCommentItem.nId = "sheet" + pCommentItem.wsId + "_" + (ws.aComments.length + 1); - }*/ - - nAuthorId = parseInt(pComment.authorId); - if (nAuthorId >= 0 && nAuthorId < arAuthors.length) { - pCommentItem.asc_putUserName(arAuthors[nAuthorId]); - } + if (pComment.ref && pComment.authorId) { + var sRef = AscCommonExcel.g_oRangeCache.getAscRange(pComment.ref); + if (sRef) { + nRow = sRef.r1; + nCol = sRef.c1; + pCommentItem = new Asc.asc_CCommentData(); + pCommentItem.asc_putDocumentFlag(false); + pCommentItem.nRow = nRow; + pCommentItem.nCol = nCol; + + //TODO флаг всегда будет false + /*if (pCommentItem.asc_getDocumentFlag()) { + pCommentItem.nId = "doc_" + (this.wb.aComments.length + 1); + } else { + pCommentItem.wsId = ws.Id; + pCommentItem.nId = "sheet" + pCommentItem.wsId + "_" + (ws.aComments.length + 1); + }*/ + + nAuthorId = parseInt(pComment.authorId); + if (nAuthorId >= 0 && nAuthorId < arAuthors.length) { + pCommentItem.asc_putUserName(arAuthors[nAuthorId]); + } - var pSi = pComment.oText; - if (pSi) { - pCommentItem.asc_putText(pSi.getText()); - } + var pSi = pComment.oText; + if (pSi) { + pCommentItem.asc_putText(pSi.getText()); + } - pCommentItem.threadedComment = pThreadedComment;//c_oSer_Comments.ThreadedComment - pCommentItem.ThreadedCommentCopy = bThreadedCommentCopy;//bool m_bThreadedCommentCopy + pCommentItem.threadedComment = pThreadedComment;//c_oSer_Comments.ThreadedComment + pCommentItem.ThreadedCommentCopy = bThreadedCommentCopy;//bool m_bThreadedCommentCopy - var sNewId = nRow + "-" + nCol; - m_mapComments[sNewId] = pCommentItem; + var sNewId = nRow + "-" + nCol; + m_mapComments[sNewId] = pCommentItem; + } } } } - } - for (i = 0; i < pVmlDrawing.items.length; ++i) { - var pShape = pVmlDrawing.items[i]; - if (!pShape || AscDFH.historyitem_type_VMLShape !== pShape.getObjectType()) { - continue; - } - - /*if (pShape.sId) - {//mark shape as used - boost::unordered_map::iterator pFind = pVmlDrawing->m_mapShapes.find(pShape->m_sId.get()); - if (pFind != pVmlDrawing->m_mapShapes.end()) - { - pFind->second.bUsed = true; + for (i = 0; i < pVmlDrawing.items.length; ++i) { + var pShape = pVmlDrawing.items[i]; + if (!pShape || AscDFH.historyitem_type_VMLShape !== pShape.getObjectType()) { + continue; } - }*/ - for (j = 0; j < pShape.items.length; ++j) { - var pElem = pShape.items[j]; + /*if (pShape.sId) + {//mark shape as used + boost::unordered_map::iterator pFind = pVmlDrawing->m_mapShapes.find(pShape->m_sId.get()); + if (pFind != pVmlDrawing->m_mapShapes.end()) + { + pFind->second.bUsed = true; + } + }*/ - if (!pElem) { - continue; - } + for (j = 0; j < pShape.items.length; ++j) { + var pElem = pShape.items[j]; - if (AscDFH.historyitem_type_VMLClientData === pElem.getObjectType()) { - var pClientData = pElem; - if (null != pClientData.m_oRow && null != pClientData.m_oColumn) { - nRow = parseInt(pClientData.m_oRow); - nCol = parseInt(pClientData.m_oColumn); - var sId = nRow + "" + "-" + nCol + ""; - - pCommentItem = m_mapComments[sId]; - if (pCommentItem) { - /*if(pShape->m_sGfxData.IsInit()) - pCommentItem->m_sGfxdata = *pShape->m_sGfxData;*/ - - var oCommentCoords = new AscCommonExcel.asc_CCommentCoords(); - var m_aAnchor = []; - pClientData.getAnchorArray(m_aAnchor); - if (8 <= m_aAnchor.length) { - oCommentCoords.nLeft = Math.abs(m_aAnchor[0]); - oCommentCoords.nLeftOffset = Math.abs(m_aAnchor[1]); - oCommentCoords.nTop = Math.abs(m_aAnchor[2]); - oCommentCoords.nTopOffset = Math.abs(m_aAnchor[3]); - oCommentCoords.nRight = Math.abs(m_aAnchor[4]); - oCommentCoords.nRightOffset = Math.abs(m_aAnchor[5]); - oCommentCoords.nBottom = Math.abs(m_aAnchor[6]); - oCommentCoords.nBottomOffset = Math.abs(m_aAnchor[7]); - } - oCommentCoords.bMoveWithCells = pClientData.m_oMoveWithCells; - oCommentCoords.bSizeWithCells = pClientData.m_oSizeWithCells; + if (!pElem) { + continue; + } - oCommentCoords.nCol = nCol; - oCommentCoords.nRow = nRow; + if (AscDFH.historyitem_type_VMLClientData === pElem.getObjectType()) { + var pClientData = pElem; + if (null != pClientData.m_oRow && null != pClientData.m_oColumn) { + nRow = parseInt(pClientData.m_oRow); + nCol = parseInt(pClientData.m_oColumn); + var sId = nRow + "" + "-" + nCol + ""; + + pCommentItem = m_mapComments[sId]; + if (pCommentItem) { + /*if(pShape->m_sGfxData.IsInit()) + pCommentItem->m_sGfxdata = *pShape->m_sGfxData;*/ + + var oCommentCoords = new AscCommonExcel.asc_CCommentCoords(); + var m_aAnchor = []; + pClientData.getAnchorArray(m_aAnchor); + if (8 <= m_aAnchor.length) { + oCommentCoords.nLeft = Math.abs(m_aAnchor[0]); + oCommentCoords.nLeftOffset = Math.abs(m_aAnchor[1]); + oCommentCoords.nTop = Math.abs(m_aAnchor[2]); + oCommentCoords.nTopOffset = Math.abs(m_aAnchor[3]); + oCommentCoords.nRight = Math.abs(m_aAnchor[4]); + oCommentCoords.nRightOffset = Math.abs(m_aAnchor[5]); + oCommentCoords.nBottom = Math.abs(m_aAnchor[6]); + oCommentCoords.nBottomOffset = Math.abs(m_aAnchor[7]); + } + oCommentCoords.bMoveWithCells = pClientData.m_oMoveWithCells; + oCommentCoords.bSizeWithCells = pClientData.m_oSizeWithCells; - pCommentItem.coords = oCommentCoords; + oCommentCoords.nCol = nCol; + oCommentCoords.nRow = nRow; - //todo bHidden ? - //oCommentCoords->m_bVisible = pClientData->m_oVisible; - //pCommentItem.bHidden = !pClientData.m_oVisible; + pCommentItem.coords = oCommentCoords; - //pCommentItem.coords = oCommentCoords; + //todo bHidden ? + //oCommentCoords->m_bVisible = pClientData->m_oVisible; + //pCommentItem.bHidden = !pClientData.m_oVisible; - if (pShape.m_oFillColor) { - /*BYTE r = pShape->m_oFillColor->Get_R(); - BYTE g = pShape->m_oFillColor->Get_G(); - BYTE b = pShape->m_oFillColor->Get_B(); + //pCommentItem.coords = oCommentCoords; - std::wstringstream sstream; - sstream << boost::wformat( L"%02X%02X%02X" ) % r % g % b; + if (pShape.m_oFillColor) { + /*BYTE r = pShape->m_oFillColor->Get_R(); + BYTE g = pShape->m_oFillColor->Get_G(); + BYTE b = pShape->m_oFillColor->Get_B(); - pCommentItem->m_sFillColorRgb = sstream.str();*/ - } + std::wstringstream sstream; + sstream << boost::wformat( L"%02X%02X%02X" ) % r % g % b; - var oPoint = new AscFormat.CPoint(), oUCssValue; - for (var k = 0; k < pShape.m_oStyle.m_arrProperties.length; ++k) { - if (!pShape.m_oStyle.m_arrProperties[i]) { - continue; + pCommentItem->m_sFillColorRgb = sstream.str();*/ } - var oProperty = pShape.m_oStyle.m_arrProperties[k]; - if (AscFormat.ECssPropertyType.cssptMarginLeft === oProperty.get_Type()) { - oUCssValue = oProperty.m_oValue; - if (AscFormat.ECssUnitsType.cssunitstypeUnits === oUCssValue.oValue.m_eType) { - oPoint.FromPoints(oUCssValue.oValue.dValue); - pCommentItem.coords.dLeftMM = oPoint.ToMm(); - } - } else if (AscFormat.ECssPropertyType.cssptMarginTop === oProperty.get_Type()) { - oUCssValue = oProperty.m_oValue; - if (AscFormat.ECssUnitsType.cssunitstypeUnits === oUCssValue.oValue.m_eType) { - oPoint.FromPoints(oUCssValue.oValue.dValue); - pCommentItem.coords.dTopMM = oPoint.ToMm(); + var oPoint = new AscFormat.CPoint(), oUCssValue; + for (var k = 0; k < pShape.m_oStyle.m_arrProperties.length; ++k) { + if (!pShape.m_oStyle.m_arrProperties[i]) { + continue; } - } else if (AscFormat.ECssPropertyType.cssptWidth === oProperty.get_Type()) { - oUCssValue = oProperty.m_oValue; - if (AscFormat.ECssUnitsType.cssunitstypeUnits === oUCssValue.oValue.m_eType) { - oPoint.FromPoints(oUCssValue.oValue.dValue); - pCommentItem.coords.dWidthMM = oPoint.ToMm(); - } - } else if (AscFormat.ECssPropertyType.cssptHeight === oProperty.get_Type()) { - oUCssValue = oProperty.m_oValue; - if (AscFormat.ECssUnitsType.cssunitstypeUnits === oUCssValue.oValue.m_eType) { - oPoint.FromPoints(oUCssValue.oValue.dValue); - pCommentItem.coords.dHeightMM = oPoint.ToMm(); + + var oProperty = pShape.m_oStyle.m_arrProperties[k]; + if (AscFormat.ECssPropertyType.cssptMarginLeft === oProperty.get_Type()) { + oUCssValue = oProperty.m_oValue; + if (AscFormat.ECssUnitsType.cssunitstypeUnits === oUCssValue.oValue.m_eType) { + oPoint.FromPoints(oUCssValue.oValue.dValue); + pCommentItem.coords.dLeftMM = oPoint.ToMm(); + } + } else if (AscFormat.ECssPropertyType.cssptMarginTop === oProperty.get_Type()) { + oUCssValue = oProperty.m_oValue; + if (AscFormat.ECssUnitsType.cssunitstypeUnits === oUCssValue.oValue.m_eType) { + oPoint.FromPoints(oUCssValue.oValue.dValue); + pCommentItem.coords.dTopMM = oPoint.ToMm(); + } + } else if (AscFormat.ECssPropertyType.cssptWidth === oProperty.get_Type()) { + oUCssValue = oProperty.m_oValue; + if (AscFormat.ECssUnitsType.cssunitstypeUnits === oUCssValue.oValue.m_eType) { + oPoint.FromPoints(oUCssValue.oValue.dValue); + pCommentItem.coords.dWidthMM = oPoint.ToMm(); + } + } else if (AscFormat.ECssPropertyType.cssptHeight === oProperty.get_Type()) { + oUCssValue = oProperty.m_oValue; + if (AscFormat.ECssUnitsType.cssunitstypeUnits === oUCssValue.oValue.m_eType) { + oPoint.FromPoints(oUCssValue.oValue.dValue); + pCommentItem.coords.dHeightMM = oPoint.ToMm(); + } } } } @@ -2089,218 +2087,219 @@ var editor; } } } - } - var applyThreadedComment = function (_commentData, _threadedComment) { - oAdditionalData.isThreadedComment = true; - _commentData.asc_putSolved(false); - _commentData.aReplies = []; + var applyThreadedComment = function (_commentData, _threadedComment) { + oAdditionalData.isThreadedComment = true; + _commentData.asc_putSolved(false); + _commentData.aReplies = []; - if (_threadedComment.dT != null) { - _commentData.asc_putTime(""); - var dateMs = AscCommon.getTimeISO8601(_threadedComment.dT); - if (!isNaN(dateMs)) { - _commentData.asc_putOnlyOfficeTime(dateMs + ""); + if (_threadedComment.dT != null) { + _commentData.asc_putTime(""); + var dateMs = AscCommon.getTimeISO8601(_threadedComment.dT); + if (!isNaN(dateMs)) { + _commentData.asc_putOnlyOfficeTime(dateMs + ""); + } } - } - if (_threadedComment.personId != null) { - var person = personList.getByGuid(_threadedComment.personId); - if (person) { - _commentData.asc_putUserName(person.displayName); - _commentData.asc_putUserId(person.userId); - _commentData.asc_putProviderId(person.providerId); + if (_threadedComment.personId != null) { + var person = personList.getByGuid(_threadedComment.personId); + if (person) { + _commentData.asc_putUserName(person.displayName); + _commentData.asc_putUserId(person.userId); + _commentData.asc_putProviderId(person.providerId); + } } - } - if (_threadedComment.id != null) { - _commentData.asc_putGuid(_threadedComment.id); - } + if (_threadedComment.id != null) { + _commentData.asc_putGuid(_threadedComment.id); + } - if (_threadedComment.done != null) { - _commentData.asc_putSolved(_threadedComment.done === "1"); - } + if (_threadedComment.done != null) { + _commentData.asc_putSolved(_threadedComment.done === "1"); + } - if (_threadedComment.text != null) { - _commentData.asc_putText(_threadedComment.text); - } + if (_threadedComment.text != null) { + _commentData.asc_putText(_threadedComment.text); + } - if (_threadedComment.m_arrReplies && _threadedComment.m_arrReplies.length) { - for (var j = 0; j < _threadedComment.m_arrReplies.length; j++) { - var reply = new Asc.asc_CCommentData(); - applyThreadedComment(reply, _threadedComment.m_arrReplies[j]); - _commentData.asc_addReply(reply); + if (_threadedComment.m_arrReplies && _threadedComment.m_arrReplies.length) { + for (var j = 0; j < _threadedComment.m_arrReplies.length; j++) { + var reply = new Asc.asc_CCommentData(); + applyThreadedComment(reply, _threadedComment.m_arrReplies[j]); + _commentData.asc_addReply(reply); + } } - } - }; + }; - for (i in m_mapComments) { + for (i in m_mapComments) { - if (m_mapComments[i].asc_getDocumentFlag()) { - m_mapComments[i].nId = "doc_" + (wb.aComments.length + 1); - } else { - m_mapComments[i].wsId = ws.Id; - m_mapComments[i].nId = "sheet" + m_mapComments[i].wsId + "_" + (ws.aComments.length + 1); - } + if (m_mapComments[i].asc_getDocumentFlag()) { + m_mapComments[i].nId = "doc_" + (wb.aComments.length + 1); + } else { + m_mapComments[i].wsId = ws.Id; + m_mapComments[i].nId = "sheet" + m_mapComments[i].wsId + "_" + (ws.aComments.length + 1); + } - var oAdditionalData = {isThreadedComment: false}; - if (m_mapComments[i].threadedComment) { - applyThreadedComment(m_mapComments[i], m_mapComments[i].threadedComment); + var oAdditionalData = {isThreadedComment: false}; + if (m_mapComments[i].threadedComment) { + applyThreadedComment(m_mapComments[i], m_mapComments[i].threadedComment); + } + xmlParserContext.InitOpenManager.prepareComments(ws, m_mapComments[i].coords, [m_mapComments[i]], oAdditionalData); } - xmlParserContext.InitOpenManager.prepareComments(ws, m_mapComments[i].coords, [m_mapComments[i]], oAdditionalData); + }; + + //буду читать по формату, далее преобразовывать + var comments, pThreadedComments; + var commentsFile = wsPart.getPartsByRelationshipType(openXml.Types.worksheetComments.relationType); + for (i = 0; i < commentsFile.length; ++i) { + var contentComment = commentsFile[i].getDocumentContent(); + comments = new AscCommonExcel.CT_CComments(); + reader = new StaxParser(contentComment, comments, xmlParserContext); + comments.fromXml(reader); } - }; - //буду читать по формату, далее преобразовывать - var comments, pThreadedComments; - var commentsFile = wsPart.getPartsByRelationshipType(openXml.Types.worksheetComments.relationType); - for (i = 0; i < commentsFile.length; ++i) { - var contentComment = commentsFile[i].getDocumentContent(); - comments = new AscCommonExcel.CT_CComments(); - reader = new StaxParser(contentComment, comments, xmlParserContext); - comments.fromXml(reader); - } + var threadedCommentsFile = wsPart.getPartsByRelationshipType(openXml.Types.threadedComment.relationType); + for (i = 0; i < threadedCommentsFile.length; ++i) { + var threadedComment = threadedCommentsFile[i].getDocumentContent(); + pThreadedComments = new AscCommonExcel.CT_CThreadedComments(); + reader = new StaxParser(threadedComment, pThreadedComments, xmlParserContext); + pThreadedComments.fromXml(reader); + } - var threadedCommentsFile = wsPart.getPartsByRelationshipType(openXml.Types.threadedComment.relationType); - for (i = 0; i < threadedCommentsFile.length; ++i) { - var threadedComment = threadedCommentsFile[i].getDocumentContent(); - pThreadedComments = new AscCommonExcel.CT_CThreadedComments(); - reader = new StaxParser(threadedComment, pThreadedComments, xmlParserContext); - pThreadedComments.fromXml(reader); + PrepareComments(); } - - PrepareComments(); } } - } - }); - } else if(wbXml.sheets) { - var wsParts = []; - - //вначале беру все листы, потом запрашиваю контент каждого из них. - //связано с проблемой внтури парсера, на примере файла Read_Only_part_of_lists.xlsx - wbXml.sheets.forEach(function (wbSheetXml) { - if (null !== wbSheetXml.id && wbSheetXml.name) { - var wsPart = wbPart.getPartById(wbSheetXml.id); - wsParts.push({wsPart: wsPart, id: wbSheetXml.id, name: wbSheetXml.name, bHidden: wbSheetXml.bHidden}); - } - }); + }); + } else if(wbXml.sheets) { + var wsParts = []; + + //вначале беру все листы, потом запрашиваю контент каждого из них. + //связано с проблемой внтури парсера, на примере файла Read_Only_part_of_lists.xlsx + wbXml.sheets.forEach(function (wbSheetXml) { + if (null !== wbSheetXml.id && wbSheetXml.name) { + var wsPart = wbPart.getPartById(wbSheetXml.id); + wsParts.push({wsPart: wsPart, id: wbSheetXml.id, name: wbSheetXml.name, bHidden: wbSheetXml.bHidden}); + } + }); - wsParts.forEach(function(wbSheetXml, wsIndex) { - var ws = t.wbModel.getWorksheet(wsIndex); - if (null !== wbSheetXml.id && wbSheetXml.name) { - var wsPart = wbSheetXml.wsPart; - if (wsPart) { - //pivot - var pivotParts = wsPart.getPartsByRelationshipType(openXml.Types.pivotTable.relationType); - for (i = 0; i < pivotParts.length; ++i) { - var contentPivotTable = pivotParts[i].getDocumentContent(); - var pivotTable = new Asc.CT_pivotTableDefinition(true); - new openXml.SaxParserBase().parse(contentPivotTable, pivotTable); - var cacheDefinition = pivotCaches[pivotTable.cacheId]; - if (cacheDefinition) { - pivotTable.cacheDefinition = cacheDefinition; - ws.insertPivotTable(pivotTable); + wsParts.forEach(function(wbSheetXml, wsIndex) { + var ws = t.wbModel.getWorksheet(wsIndex); + if (null !== wbSheetXml.id && wbSheetXml.name) { + var wsPart = wbSheetXml.wsPart; + if (wsPart) { + //pivot + var pivotParts = wsPart.getPartsByRelationshipType(openXml.Types.pivotTable.relationType); + for (i = 0; i < pivotParts.length; ++i) { + var contentPivotTable = pivotParts[i].getDocumentContent(); + var pivotTable = new Asc.CT_pivotTableDefinition(true); + new openXml.SaxParserBase().parse(contentPivotTable, pivotTable); + var cacheDefinition = pivotCaches[pivotTable.cacheId]; + if (cacheDefinition) { + pivotTable.cacheDefinition = cacheDefinition; + ws.insertPivotTable(pivotTable); + } } } } - } - }); - } + }); + } - if (this.isOpenOOXInBrowser) { - //defined names - if (wbXml.newDefinedNames) { - xmlParserContext.InitOpenManager.oReadResult.defNames = wbXml.newDefinedNames; - xmlParserContext.InitOpenManager.PostLoadPrepareDefNames(wb); + if (t.isOpenOOXInBrowser) { + //defined names + if (wbXml.newDefinedNames) { + xmlParserContext.InitOpenManager.oReadResult.defNames = wbXml.newDefinedNames; + xmlParserContext.InitOpenManager.PostLoadPrepareDefNames(wb); + } } - } - var readSheetDataExternal = function (bNoBuildDep) { - for (var i = 0; i < xmlParserContext.InitOpenManager.oReadResult.sheetData.length; ++i) { - var sheetDataElem = xmlParserContext.InitOpenManager.oReadResult.sheetData[i]; - var ws = sheetDataElem.ws; - - var tmp = { - pos: null, - len: null, - bNoBuildDep: bNoBuildDep, - ws: ws, - row: new AscCommonExcel.Row(ws), - cell: new AscCommonExcel.Cell(ws), - formula: new AscCommonExcel.OpenFormula(), - sharedFormulas: {}, - prevFormulas: {}, - siFormulas: {}, - prevRow: -1, - prevCol: -1, - formulaArray: [] - }; + var readSheetDataExternal = function (bNoBuildDep) { + for (var i = 0; i < xmlParserContext.InitOpenManager.oReadResult.sheetData.length; ++i) { + var sheetDataElem = xmlParserContext.InitOpenManager.oReadResult.sheetData[i]; + var ws = sheetDataElem.ws; + + var tmp = { + pos: null, + len: null, + bNoBuildDep: bNoBuildDep, + ws: ws, + row: new AscCommonExcel.Row(ws), + cell: new AscCommonExcel.Cell(ws), + formula: new AscCommonExcel.OpenFormula(), + sharedFormulas: {}, + prevFormulas: {}, + siFormulas: {}, + prevRow: -1, + prevCol: -1, + formulaArray: [] + }; - var sheetData = new AscCommonExcel.CT_SheetData(); - xmlParserContext.InitOpenManager.tmp = tmp; - - sheetDataElem.reader.setState(sheetDataElem.state); - //TODO пересмотреть фунцию fromXml - sheetData.fromXml2(sheetDataElem.reader); - - if (!bNoBuildDep) { - //TODO возможно стоит делать это в worksheet после полного чтения - //***array-formula*** - //добавление ко всем ячейкам массива головной формулы - for (var j = 0; j < tmp.formulaArray.length; j++) { - var curFormula = tmp.formulaArray[j]; - var ref = curFormula.ref; - if (ref) { - var rangeFormulaArray = tmp.ws.getRange3(ref.r1, ref.c1, ref.r2, ref.c2); - rangeFormulaArray._foreach(function (cell) { - cell.setFormulaInternal(curFormula); - if (curFormula.ca || cell.isNullTextString()) { - tmp.ws.workbook.dependencyFormulas.addToChangedCell(cell); - } - }); + var sheetData = new AscCommonExcel.CT_SheetData(); + xmlParserContext.InitOpenManager.tmp = tmp; + + sheetDataElem.reader.setState(sheetDataElem.state); + //TODO пересмотреть фунцию fromXml + sheetData.fromXml2(sheetDataElem.reader); + + if (!bNoBuildDep) { + //TODO возможно стоит делать это в worksheet после полного чтения + //***array-formula*** + //добавление ко всем ячейкам массива головной формулы + for (var j = 0; j < tmp.formulaArray.length; j++) { + var curFormula = tmp.formulaArray[j]; + var ref = curFormula.ref; + if (ref) { + var rangeFormulaArray = tmp.ws.getRange3(ref.r1, ref.c1, ref.r2, ref.c2); + rangeFormulaArray._foreach(function (cell) { + cell.setFormulaInternal(curFormula); + if (curFormula.ca || cell.isNullTextString()) { + tmp.ws.workbook.dependencyFormulas.addToChangedCell(cell); + } + }); + } } - } - for (var nCol in tmp.prevFormulas) { - if (tmp.prevFormulas.hasOwnProperty(nCol)) { - var prevFormula = tmp.prevFormulas[nCol]; - if (!tmp.siFormulas[prevFormula.parsed.getListenerId()]) { - prevFormula.parsed.buildDependencies(); + for (var nCol in tmp.prevFormulas) { + if (tmp.prevFormulas.hasOwnProperty(nCol)) { + var prevFormula = tmp.prevFormulas[nCol]; + if (!tmp.siFormulas[prevFormula.parsed.getListenerId()]) { + prevFormula.parsed.buildDependencies(); + } } } - } - for (var listenerId in tmp.siFormulas) { - if (tmp.siFormulas.hasOwnProperty(listenerId)) { - tmp.siFormulas[listenerId].buildDependencies(); + for (var listenerId in tmp.siFormulas) { + if (tmp.siFormulas.hasOwnProperty(listenerId)) { + tmp.siFormulas[listenerId].buildDependencies(); + } } } } - } - }; + }; - //TODO общий код с serialize - //ReadSheetDataExternal - if (this.isOpenOOXInBrowser) { - if (!initOpenManager.copyPasteObj.isCopyPaste || initOpenManager.copyPasteObj.selectAllSheet) { - readSheetDataExternal(false); - if (!initOpenManager.copyPasteObj.isCopyPaste) { - initOpenManager.PostLoadPrepare(wb); - } - wb.init(initOpenManager.oReadResult.tableCustomFunc, initOpenManager.oReadResult.tableIds, initOpenManager.oReadResult.sheetIds, false, true); - } else { - readSheetDataExternal(true); - if (window["Asc"] && window["Asc"]["editor"] !== undefined) { - wb.init(initOpenManager.oReadResult.tableCustomFunc, initOpenManager.oReadResult.tableIds, initOpenManager.oReadResult.sheetIds, true); + //TODO общий код с serialize + //ReadSheetDataExternal + if (t.isOpenOOXInBrowser) { + if (!initOpenManager.copyPasteObj.isCopyPaste || initOpenManager.copyPasteObj.selectAllSheet) { + readSheetDataExternal(false); + if (!initOpenManager.copyPasteObj.isCopyPaste) { + initOpenManager.PostLoadPrepare(wb); + } + wb.init(initOpenManager.oReadResult.tableCustomFunc, initOpenManager.oReadResult.tableIds, initOpenManager.oReadResult.sheetIds, false, true); + } else { + readSheetDataExternal(true); + if (window["Asc"] && window["Asc"]["editor"] !== undefined) { + wb.init(initOpenManager.oReadResult.tableCustomFunc, initOpenManager.oReadResult.tableIds, initOpenManager.oReadResult.sheetIds, true); + } } } - } - initOpenManager.readDefStyles(wb, wb.CellStyles.DefaultStyles); + initOpenManager.readDefStyles(wb, wb.CellStyles.DefaultStyles); + + wb.initPostOpenZip(pivotCaches, xmlParserContext); + }); - wb.initPostOpenZip(pivotCaches, xmlParserContext); window.nativeZlibEngine.close(); //clean up openXml.SaxParserDataTransfer = {};