diff --git a/cell/api.js b/cell/api.js
index ff7e2f26ff..b3f9c1ad03 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;
}
@@ -1489,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 mapCheckCopyThreadedComments = [];
+ var arAuthors = comments.authors && comments.authors.arr;
- var i, j, nRow, nCol, nAuthorId, pCommentItem;
- if (comments.commentList) {
- var aComments = comments.commentList.arr;
+ 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;
- }
+ 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();
+ }
}
}
}
@@ -2085,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 = {};