/*
* (c) Copyright Ascensio System SIA 2010-2024
*
* This program is a free software product. You can redistribute it and/or
* modify it under the terms of the GNU Affero General Public License (AGPL)
* version 3 as published by the Free Software Foundation. In accordance with
* Section 7(a) of the GNU AGPL its Section 15 shall be amended to the effect
* that Ascensio System SIA expressly excludes the warranty of non-infringement
* of any third-party rights.
*
* This program is distributed WITHOUT ANY WARRANTY; without even the implied
* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. For
* details, see the GNU AGPL at: http://www.gnu.org/licenses/agpl-3.0.html
*
* You can contact Ascensio System SIA at 20A-6 Ernesta Birznieka-Upish
* street, Riga, Latvia, EU, LV-1050.
*
* The interactive user interfaces in modified source and object code versions
* of the Program must display Appropriate Legal Notices, as required under
* Section 5 of the GNU AGPL version 3.
*
* Pursuant to Section 7(b) of the License you must retain the original Product
* logo when distributing the program. Pursuant to Section 7(e) we decline to
* grant you any rights under trademark law for use of our trademarks.
*
* All the Product's GUI elements, including illustrations and icon sets, as
* well as technical writing content are licensed under the terms of the
* Creative Commons Attribution-ShareAlike 4.0 International. See the License
* terms at http://creativecommons.org/licenses/by-sa/4.0/legalcode
*
*/
"use strict";
var editor;
(/**
* @param {Window} window
* @param {undefined} undefined
*/
function(window, undefined) {
var asc = window["Asc"];
var prot;
var c_oAscAdvancedOptionsAction = AscCommon.c_oAscAdvancedOptionsAction;
var c_oAscLockTypes = AscCommon.c_oAscLockTypes;
var CColor = AscCommon.CColor;
var g_oDocumentUrls = AscCommon.g_oDocumentUrls;
var sendCommand = AscCommon.sendCommand;
var parserHelp = AscCommon.parserHelp;
var g_oIdCounter = AscCommon.g_oIdCounter;
var g_oTableId = AscCommon.g_oTableId;
var c_oAscLockTypeElem = AscCommonExcel.c_oAscLockTypeElem;
var c_oAscError = asc.c_oAscError;
var c_oAscFileType = asc.c_oAscFileType;
var c_oAscAsyncAction = asc.c_oAscAsyncAction;
var c_oAscAdvancedOptionsID = asc.c_oAscAdvancedOptionsID;
var c_oAscAsyncActionType = asc.c_oAscAsyncActionType;
var History = null;
/**
*
* @param config
* @constructor
* @returns {spreadsheet_api}
* @extends {AscCommon.baseEditorsApi}
*/
function spreadsheet_api(config) {
AscCommon.baseEditorsApi.call(this, config, AscCommon.c_oEditorId.Spreadsheet);
/************ private!!! **************/
this.topLineEditorName = config['id-input'] || '';
this.topLineEditorElement = null;
this.controller = null;
this.handlers = new AscCommonExcel.asc_CHandlersList();
this.fontRenderingMode = Asc.c_oAscFontRenderingModeType.hintingAndSubpixeling;
this.wb = null;
this.wbModel = null;
this.tmpLCID = null;
this.tmpDecimalSeparator = null;
this.tmpGroupSeparator = null;
this.tmpLocalization = null;
this.activeLocalization = null;
// spellcheck
this.defaultLanguage = 1033;
this.spellcheckState = new AscCommonExcel.CSpellcheckState();
this.documentFormatSave = c_oAscFileType.XLSX;
// объекты, нужные для отправки в тулбар (шрифты, стили)
this._gui_control_colors = null;
this.GuiControlColorsMap = null;
this.IsSendStandartColors = false;
this.asyncMethodCallback = undefined;
this.IsInitControl = false;//single canvas creation
// Переменная отвечает, загрузились ли фонты
this.FontLoadWaitComplete = false;
//текущий обьект куда записываются информация для update, когда принимаются изменения в native редакторе
this.oRedoObjectParamNative = null;
this.collaborativeEditing = null;
// AutoSave
this.autoSaveGapRealTime = 30; // Интервал быстрого автосохранения (когда выставлен флаг realtime) - 30 мс.
// Shapes
this.isStartAddShape = false;
this.shapeElementId = null;
this.textArtElementId = null;
//frozen pane border type
this.frozenPaneBorderType = Asc.c_oAscFrozenPaneBorderType.shadow;
// Styles sizes
this.styleThumbnailWidth = 100;
this.styleThumbnailHeight = 20;
this.formulasList = null; // Список всех формул
this.openingEnd = {bin: false, xlsxStart: false, xlsx: false, data: null, perfStart: 0};
this.tmpR1C1mode = null;
this.isEditVisibleAreaOleEditor = false;
this.insertDocumentUrlsData = null;
this._init();
return this;
}
spreadsheet_api.prototype = Object.create(AscCommon.baseEditorsApi.prototype);
spreadsheet_api.prototype.constructor = spreadsheet_api;
spreadsheet_api.prototype.sendEvent = function() {
this.sendInternalEvent.apply(this, arguments);
this.handlers.trigger.apply(this.handlers, arguments);
};
spreadsheet_api.prototype.asc_checkNeedCallback = function(name)
{
return this.handlers.hasTrigger(name);
};
spreadsheet_api.prototype._init = function() {
AscCommon.baseEditorsApi.prototype._init.call(this);
this.topLineEditorElement = document.getElementById(this.topLineEditorName);
// ToDo нужно ли это
asc['editor'] = ( asc['editor'] || this );
};
spreadsheet_api.prototype._loadSdkImages = function () {
var aImages = AscCommonExcel.getIconsForLoad();
aImages.push(AscCommonExcel.sFrozenImageUrl, AscCommonExcel.sFrozenImageRotUrl);
this.ImageLoader.LoadImagesWithCallback(aImages, function() {
if(this.wbModel && this.wb) {
this.asc_showWorksheet(this.asc_getActiveWorksheetIndex());
}
}, []);
};
spreadsheet_api.prototype.asc_CheckGuiControlColors = function() {
// потом реализовать проверку на то, что нужно ли посылать
var arr_colors = new Array(10);
var array_colors_types = [6, 15, 7, 16, 0, 1, 2, 3, 4, 5];
var _count = arr_colors.length;
for (var i = 0; i < _count; ++i) {
var color = AscCommonExcel.g_oColorManager.getThemeColor(i);
arr_colors[i] = new Asc.asc_CColor(color.getR(), color.getG(), color.getB());
arr_colors[i].setColorSchemeId(array_colors_types[i])
}
// теперь проверим
var bIsSend = false;
if (this.GuiControlColorsMap != null) {
for (var i = 0; i < _count; ++i) {
var _color1 = this.GuiControlColorsMap[i];
var _color2 = arr_colors[i];
if ((_color1.r !== _color2.r) || (_color1.g !== _color2.g) || (_color1.b !== _color2.b)) {
bIsSend = true;
break;
}
}
} else {
this.GuiControlColorsMap = new Array(_count);
bIsSend = true;
}
if (bIsSend) {
for (var i = 0; i < _count; ++i) {
this.GuiControlColorsMap[i] = arr_colors[i];
}
this.asc_SendControlColors();
}
};
spreadsheet_api.prototype.asc_SendControlColors = function() {
let standart_colors = null;
if (!this.IsSendStandartColors) {
let standartColors = AscCommon.g_oStandartColors;
let _c_s = standartColors.length;
standart_colors = new Array(_c_s);
for (let i = 0; i < _c_s; ++i) {
standart_colors[i] = new Asc.asc_CColor(standartColors[i].R, standartColors[i].G, standartColors[i].B);
}
this.IsSendStandartColors = true;
}
let _count = this.GuiControlColorsMap.length;
let _ret_array = new Array(_count * 6);
let _cur_index = 0;
var array_colors_types = [6, 15, 7, 16, 0, 1, 2, 3, 4, 5];
for (let i = 0; i < _count; ++i) {
let basecolor = AscCommonExcel.g_oColorManager.getThemeColor(i);
let aTints = AscCommonExcel.g_oThemeColorsDefaultModsSpreadsheet[AscCommon.GetDefaultColorModsIndex(basecolor.getR(), basecolor.getG(), basecolor.getB())];
for (let j = 0, length = aTints.length; j < length; ++j) {
let tint = aTints[j];
let color = AscCommonExcel.g_oColorManager.getThemeColor(i, tint);
let oColor = new Asc.asc_CColor(color.getR(), color.getG(), color.getB());
oColor.setColorSchemeId(array_colors_types[i]);
oColor.put_effectValue(tint);
_ret_array[_cur_index] = oColor;
_cur_index++;
}
}
this.asc_SendThemeColors(_ret_array, standart_colors);
};
spreadsheet_api.prototype.asc_getFunctionArgumentSeparator = function () {
return AscCommon.FormulaSeparators.functionArgumentSeparator;
};
spreadsheet_api.prototype.asc_getCurrencySymbols = function () {
var result = {};
for (var key in AscCommon.g_aCultureInfos) {
result[key] = AscCommon.g_aCultureInfos[key].CurrencySymbol;
}
return result;
};
spreadsheet_api.prototype.asc_getAdditionalCurrencySymbols = function () {
return AscCommon.g_aAdditionalCurrencySymbols;
};
spreadsheet_api.prototype.asc_getLocaleExample = function(format, value, culture) {
var cultureInfo = AscCommon.g_aCultureInfos[culture] || AscCommon.g_oDefaultCultureInfo;
var numFormat = AscCommon.oNumFormatCache.get(format || "General");
var res;
if (null == value) {
var ws = this.wbModel.getActiveWs();
var activeCell = ws.selectionRange.activeCell;
ws._getCellNoEmpty(activeCell.row, activeCell.col, function(cell) {
if (cell) {
res = cell.getValueForExample(numFormat, cultureInfo);
} else {
res = '';
}
});
} else {
res = numFormat.formatToChart(value, undefined, cultureInfo);
}
return res;
};
spreadsheet_api.prototype.asc_convertNumFormatLocal2NumFormat = function(format) {
var oFormat = new AscCommon.CellFormat(format,undefined,true);
return oFormat.toString(0, false);
};
spreadsheet_api.prototype.asc_convertNumFormat2NumFormatLocal = function(format) {
var oFormat = new AscCommon.CellFormat(format,undefined,false);
return oFormat.toString(0, true);
};
spreadsheet_api.prototype.asc_getFormatCells = function(info) {
var res = AscCommon.getFormatCells(info);
if (Asc.c_oAscNumFormatType.Custom === info.type) {
var unique = {};
res.forEach(function(elem) {
unique[elem] = 1;
});
//todo delete button
var wbNums = AscCommonExcel.g_StyleCache.getNumFormatStrings();
wbNums.forEach(function(elem) {
if (!unique[elem]) {
unique[elem] = 1;
res.push(elem);
}
});
}
return res;
};
spreadsheet_api.prototype.asc_getLocaleCurrency = function(val) {
var cultureInfo = AscCommon.g_aCultureInfos[val];
if (!cultureInfo) {
cultureInfo = AscCommon.g_aCultureInfos[1033];
}
return AscCommonExcel.getCurrencyFormat(cultureInfo, 2, true, true, null);
};
spreadsheet_api.prototype.asc_getCurrentListType = function(){
var ws = this.wb.getWorksheet();
var oParaPr;
if (ws && ws.objectRender && ws.objectRender.controller) {
oParaPr = ws.objectRender.controller.getParagraphParaPr();
}
return new AscCommon.asc_CListType(AscFormat.fGetListTypeFromBullet(oParaPr && oParaPr.Bullet));
};
spreadsheet_api.prototype.asc_setLocale = function (LCID, decimalSeparator, groupSeparator) {
if (!this.isLoadFullApi) {
this.tmpLCID = LCID;
this.tmpDecimalSeparator = decimalSeparator;
this.tmpGroupSeparator = groupSeparator;
return;
}
if (AscCommon.setCurrentCultureInfo(LCID, decimalSeparator, groupSeparator)) {
parserHelp.setDigitSeparator(AscCommon.g_oDefaultCultureInfo.NumberDecimalSeparator);
if (this.wbModel) {
AscCommon.oGeneralEditFormatCache.cleanCache();
AscCommon.oNumFormatCache.cleanCache();
this.wbModel.rebuildColors();
if (this.isDocumentLoadComplete) {
AscCommon.checkCultureInfoFontPicker();
this.wb && this.wb.cleanCache();
this._loadFonts([], function () {
this._onUpdateAfterApplyChanges();
});
}
}
}
};
spreadsheet_api.prototype.asc_getLocale = function () {
return this.isLoadFullApi ? AscCommon.g_oDefaultCultureInfo.LCID : this.tmpLCID;
};
spreadsheet_api.prototype.asc_getDecimalSeparator = function (culture) {
var cultureInfo = AscCommon.g_aCultureInfos[culture] || AscCommon.g_oDefaultCultureInfo;
return cultureInfo.NumberDecimalSeparator;
};
spreadsheet_api.prototype.asc_getGroupSeparator = function (culture) {
var cultureInfo = AscCommon.g_aCultureInfos[culture] || AscCommon.g_oDefaultCultureInfo;
return cultureInfo.NumberGroupSeparator;
};
spreadsheet_api.prototype.asc_getFrozenPaneBorderType = function() {
return this.frozenPaneBorderType;
};
spreadsheet_api.prototype.asc_setFrozenPaneBorderType = function(nType) {
if(this.frozenPaneBorderType !== nType) {
this.frozenPaneBorderType = nType;
if(this.wbModel) {
this.asc_showWorksheet(this.asc_getActiveWorksheetIndex());
}
}
};
spreadsheet_api.prototype._openDocument = function(data) {
this.wbModel = new AscCommonExcel.Workbook(this.handlers, this, true);
this.initGlobalObjects(this.wbModel);
AscFonts.IsCheckSymbols = true;
if(this.isOpenOOXInBrowser) {
this.openingEnd.xlsx = true;
this.openingEnd.xlsxStart = true;
this.openingEnd.data = data;
} else {
var oBinaryFileReader = new AscCommonExcel.BinaryFileReader();
oBinaryFileReader.Read(data, this.wbModel);
}
AscFonts.IsCheckSymbols = false;
this.openingEnd.bin = true;
this._onEndOpen();
};
spreadsheet_api.prototype.initGlobalObjects = function(wbModel) {
// global counters
AscCommonExcel.UndoRedoClassTypes.Clean();
AscCommonExcel.g_oUndoRedoCell = new AscCommonExcel.UndoRedoCell(wbModel);
AscCommonExcel.g_oUndoRedoWorksheet = new AscCommonExcel.UndoRedoWoorksheet(wbModel);
AscCommonExcel.g_oUndoRedoWorkbook = new AscCommonExcel.UndoRedoWorkbook(wbModel);
AscCommonExcel.g_oUndoRedoCol = new AscCommonExcel.UndoRedoRowCol(wbModel, false);
AscCommonExcel.g_oUndoRedoRow = new AscCommonExcel.UndoRedoRowCol(wbModel, true);
AscCommonExcel.g_oUndoRedoComment = new AscCommonExcel.UndoRedoComment(wbModel);
AscCommonExcel.g_oUndoRedoAutoFilters = new AscCommonExcel.UndoRedoAutoFilters(wbModel);
AscCommonExcel.g_oUndoRedoSparklines = new AscCommonExcel.UndoRedoSparklines(wbModel);
AscCommonExcel.g_DefNameWorksheet = new AscCommonExcel.Worksheet(wbModel, -1);
AscCommonExcel.g_oUndoRedoSharedFormula = new AscCommonExcel.UndoRedoSharedFormula(wbModel);
AscCommonExcel.g_oUndoRedoLayout = new AscCommonExcel.UndoRedoRedoLayout(wbModel);
AscCommonExcel.g_oUndoRedoHeaderFooter = new AscCommonExcel.UndoRedoHeaderFooter(wbModel);
AscCommonExcel.g_oUndoRedoArrayFormula = new AscCommonExcel.UndoRedoArrayFormula(wbModel);
AscCommonExcel.g_oUndoRedoSortState = new AscCommonExcel.UndoRedoSortState(wbModel);
AscCommonExcel.g_oUndoRedoSlicer = new AscCommonExcel.UndoRedoSlicer(wbModel);
AscCommonExcel.g_oUndoRedoPivotTables = new AscCommonExcel.UndoRedoPivotTables(wbModel);
AscCommonExcel.g_oUndoRedoPivotCache = new AscCommonExcel.UndoRedoPivotCache(wbModel);
AscCommonExcel.g_oUndoRedoCacheFields = new AscCommonExcel.UndoRedoCacheFields(wbModel);
AscCommonExcel.g_oUndoRedoPivotFields = new AscCommonExcel.UndoRedoPivotFields(wbModel);
AscCommonExcel.g_oUndoRedoPivotFieldItems = new AscCommonExcel.UndoRedoPivotFieldItems(wbModel);
AscCommonExcel.g_oUndoRedoCF = new AscCommonExcel.UndoRedoCF(wbModel);
AscCommonExcel.g_oUndoRedoProtectedRange = new AscCommonExcel.UndoRedoProtectedRange(wbModel);
AscCommonExcel.g_oUndoRedoProtectedSheet = new AscCommonExcel.UndoRedoProtectedSheet(wbModel);
AscCommonExcel.g_oUndoRedoProtectedWorkbook = new AscCommonExcel.UndoRedoProtectedWorkbook(wbModel);
AscCommonExcel.g_oUndoRedoNamedSheetViews = new AscCommonExcel.UndoRedoNamedSheetViews(wbModel);
AscCommonExcel.g_oUndoRedoUserProtectedRange = new AscCommonExcel.UndoRedoUserProtectedRange(wbModel);
};
spreadsheet_api.prototype.asc_DownloadAs = function (options) {
if (!this.canSave || this.isFrameEditor() || c_oAscAdvancedOptionsAction.None !== this.advancedOptionsAction) {
return;
}
if (this.isLongAction()) {
return;
}
this.downloadAs(c_oAscAsyncAction.DownloadAs, options);
};
spreadsheet_api.prototype._saveCheck = function() {
return !this.isFrameEditor() && c_oAscAdvancedOptionsAction.None === this.advancedOptionsAction &&
!this.isLongAction() && !this.asc_getIsTrackShape() && !this.isOpenedChartFrame &&
History.IsEndTransaction();
};
spreadsheet_api.prototype._haveOtherChanges = function () {
return this.collaborativeEditing.haveOtherChanges();
};
spreadsheet_api.prototype._prepareSave = function (isIdle) {
var tmpHandlers;
if (isIdle) {
tmpHandlers = this.wbModel.handlers.handlers['asc_onError'];
this.wbModel.handlers.handlers['asc_onError'] = null;
}
/* Нужно закрыть редактор (до выставления флага canSave, т.к. мы должны успеть отправить
asc_onDocumentModifiedChanged для подписки на сборку) Баг http://bugzilla.onlyoffice.com/show_bug.cgi?id=28331 */
if (!this.asc_closeCellEditor()) {
if (isIdle) {
this.asc_closeCellEditor(true);
} else {
return false;
}
}
if (isIdle) {
this.wbModel.handlers.handlers['asc_onError'] = tmpHandlers;
}
return true;
};
spreadsheet_api.prototype._printDesktop = function (options) {
let advOpt = options && options.advancedOptions;
if (advOpt && advOpt.asc_getNativeOptions() && advOpt.asc_getNativeOptions()["quickPrint"]) {
advOpt.ignorePrintArea = true;
advOpt.printType = Asc.c_oAscPrintType.EntireWorkbook;
}
window.AscDesktopEditor_PrintOptions = options;
let desktopOptions = {};
if (advOpt) {
desktopOptions["nativeOptions"] = advOpt.asc_getNativeOptions();
}
window["AscDesktopEditor"]["Print"](JSON.stringify(desktopOptions));
return true;
};
spreadsheet_api.prototype.asc_ChangePrintArea = function(type) {
var ws = this.wb.getWorksheet();
return ws.changePrintArea(type);
};
spreadsheet_api.prototype.asc_CanAddPrintArea = function() {
var ws = this.wb.getWorksheet();
return ws.canAddPrintArea();
};
spreadsheet_api.prototype.asc_SetPrintScale = function(width, height, scale) {
if (this.collaborativeEditing.getGlobalLock() || !this.canEdit()) {
return false;
}
var ws = this.wb.getWorksheet();
return ws.setPrintScale(width, height, scale);
};
spreadsheet_api.prototype.asc_Copy = function() {
return AscCommon.g_clipboardBase.Button_Copy();
};
spreadsheet_api.prototype.asc_Paste = function() {
if (!AscCommon.g_clipboardBase.IsWorking()) {
return AscCommon.g_clipboardBase.Button_Paste();
}
return false;
};
spreadsheet_api.prototype.asc_SpecialPaste = function(props) {
return AscCommon.g_specialPasteHelper.Special_Paste(props);
};
spreadsheet_api.prototype.asc_SpecialPasteData = function(props) {
if (this.canEdit()) {
this.wb.specialPasteData(props);
}
};
spreadsheet_api.prototype.asc_TextImport = function(options, callback, bPaste) {
//return this.asc_TextFromUrl(null, options, callback);
//return this.asc_TextFromFile(options, callback);
if (this.canEdit()) {
var text;
if(bPaste) {
text = AscCommon.g_specialPasteHelper.GetPastedData(true);
} else {
var ws = this.wb.getWorksheet();
text = ws.getRangeText();
}
if(!text) {
//error
//no data was selected to parse
this.sendEvent('asc_onError', c_oAscError.ID.NoDataToParse, c_oAscError.Level.NoCritical);
callback(false);
return;
}
callback(text);
}
};
spreadsheet_api.prototype.asc_TextFromFileOrUrl = function (options, callback, url) {
if (this.canEdit()) {
if (url) {
this._getTextFromUrl(url, options, callback);
} else {
this._getTextFromFile(options, callback);
}
}
};
spreadsheet_api.prototype._getTextFromUrl = function (url, options, callback) {
var t = this;
if (this.canEdit()) {
var document = {url: url, format: "TXT"};
this.insertDocumentUrlsData = {
imageMap: null, documents: [document], convertCallback: function (_api, url) {
_api.insertDocumentUrlsData.imageMap = url;
if (!url['output.txt']) {
_api.endInsertDocumentUrls();
_api.sendEvent("asc_onError", Asc.c_oAscError.ID.DirectUrl, Asc.c_oAscError.Level.NoCritical);
return;
}
if (typeof Blob !== 'undefined' && typeof FileReader !== 'undefined') {
AscCommon.loadFileContent(url['output.txt'], function (httpRequest) {
var cp = {
'codepage': AscCommon.c_oAscCodePageNone, "delimiter": AscCommon.c_oAscCsvDelimiter.Comma,
'encodings': AscCommon.getEncodingParams()
};
if (httpRequest && httpRequest.response) {
let data = httpRequest.response;
var dataUint = new Uint8Array(data);
var bom = AscCommon.getEncodingByBOM(dataUint);
if (AscCommon.c_oAscCodePageNone !== bom.encoding) {
cp['codepage'] = bom.encoding;
data = dataUint.subarray(bom.size);
}
cp['data'] = data;
callback(new AscCommon.asc_CAdvancedOptions(cp));
} else {
t.handlers.trigger("asc_onError", c_oAscError.ID.Unknown, c_oAscError.Level.Critical);
}
_api.endInsertDocumentUrls();
}, "arraybuffer");
}
}, endCallback: function (_api) {
}
};
var _options = new Asc.asc_CDownloadOptions(Asc.c_oAscFileType.TXT);
_options.isNaturalDownload = true;
_options.isGetTextFromUrl = true;
if (document.url) {
_options.errorDirect = Asc.c_oAscError.ID.DirectUrl;
}
this.downloadAs(Asc.c_oAscAsyncAction.DownloadAs, _options);
}
};
spreadsheet_api.prototype._getTextFromFile = function (options, callback) {
let t = this;
function wrapper_callback(data) {
let bom = AscCommon.getEncodingByBOM(data);
let cp = {
'codepage': bom.encoding,
"delimiter": AscCommon.c_oAscCsvDelimiter.Comma,
'encodings': AscCommon.getEncodingParams(),
'data': AscCommon.c_oAscCodePageNone !== bom.encoding ? data.subarray(bom.size) : data
};
callback(new AscCommon.asc_CAdvancedOptions(cp));
}
if (window["AscDesktopEditor"]) {
// TODO: add translations
window["AscDesktopEditor"]["OpenFilenameDialog"]("csv/txt", false, function (_file) {
let file = _file;
if (Array.isArray(file))
file = file[0];
if (!file)
return;
window["AscDesktopEditor"]["loadLocalFile"](file, function(uint8Array) {
if (!uint8Array)
return;
wrapper_callback(uint8Array);
});
});
return;
}
AscCommon.ShowTextFileDialog(function (error, files) {
if (Asc.c_oAscError.ID.No !== error) {
t.sendEvent("asc_onError", error, Asc.c_oAscError.Level.NoCritical);
return;
}
let reader = new FileReader();
reader.onload = function () {
wrapper_callback(new Uint8Array(reader.result));
};
reader.onerror = function () {
t.sendEvent("asc_onError", Asc.c_oAscError.ID.Unknown, Asc.c_oAscError.Level.NoCritical);
};
reader.readAsArrayBuffer(files[0]);
});
};
spreadsheet_api.prototype.asc_ImportXmlStart = function (callback) {
let t = this;
if (window["AscDesktopEditor"] && window["AscDesktopEditor"]["IsLocalFile"]()) {
// TODO: add translations
window["AscDesktopEditor"]["OpenFilenameDialog"]("(*.xml)", false, function (_file) {
let file = _file;
if (Array.isArray(file)) {
file = file[0];
}
if (!file) {
callback(null);
return;
}
window["AscDesktopEditor"]["convertFile"](file, 0x2002, function (convertedFile) {
let stream = null;
if (convertedFile) {
stream = convertedFile["get"](/*Editor.bin*/);
convertedFile["close"]();
}
callback(stream ? new Uint8Array(stream) : null);
});
});
} else if (!window["NATIVE_EDITOR_ENJINE"]) {
AscCommon.ShowXmlFileDialog(function (error, files) {
if (Asc.c_oAscError.ID.No !== error) {
t.sendEvent("asc_onError", error, Asc.c_oAscError.Level.NoCritical);
callback(null);
return;
}
let format = AscCommon.GetFileExtension(files[0].name);
let reader = new FileReader();
reader.onload = function () {
t._convertFromXml({data: new Uint8Array(reader.result), format: format}, callback);
};
reader.onerror = function () {
t.sendEvent("asc_onError", Asc.c_oAscError.ID.Unknown, Asc.c_oAscError.Level.NoCritical);
callback(null);
};
reader.readAsArrayBuffer(files[0]);
});
} else {
callback(null);
}
};
spreadsheet_api.prototype.asc_ImportXmlEnd = function (stream, dataRef, newSheetName) {
let t = this;
let doInsertXml = function (_dataRef, _ws) {
let binaryData = stream;
if (!window["AscDesktopEditor"]) {
//xlst
binaryData = null;
let jsZlib = new AscCommon.ZLib();
if (!stream || !jsZlib.open(stream)) {
//t.model.handlers.trigger("asc_onErrorUpdateExternalReference", eR.Id);
return false;
}
if (jsZlib.files && jsZlib.files.length) {
binaryData = jsZlib.getFile(jsZlib.files[0]);
}
}
if (!binaryData) {
return;
}
//заполняем через банарник
let oBinaryFileReader = new AscCommonExcel.BinaryFileReader(true);
//чтобы лишнего не читать, проставляю флаг копипаст
oBinaryFileReader.InitOpenManager.copyPasteObj = {
isCopyPaste: true, activeRange: null, selectAllSheet: true
};
let wb = new AscCommonExcel.Workbook(undefined, undefined, false);
wb.DrawingDocument = Asc.editor.wbModel.DrawingDocument;
AscFormat.ExecuteNoHistory(function () {
AscCommonExcel.executeInR1C1Mode(false, function () {
oBinaryFileReader.Read(binaryData, wb);
});
});
if (wb.aWorksheets) {
let arrSheets = wb.aWorksheets;
let pastedSheet = arrSheets && arrSheets[0];
if (pastedSheet) {
if (_ws) {
t.wbModel.setActive(_ws.index);
t.wb.updateWorksheetByModel();
t.wb.showWorksheet();
}
let ws = t.wb.getWorksheet();
if (_dataRef) {
ws.setSelection(_dataRef);
}
AscCommonExcel.g_clipboardExcel.pasteProcessor.activeRange = new Asc.Range(0, 0, Math.max(pastedSheet.nColsCount - 1, 0), Math.max(pastedSheet.nRowsCount - 1, 0)).getName();
t.wb.getWorksheet().setSelectionInfo('paste', {data: pastedSheet, fromBinary: true, fontsNew: [], pasteAllSheet: true, wb: wb});
}
}
};
let doCheckRange = function (_sDataRange) {
let result = parserHelp.parse3DRef(_sDataRange);
let _range, sheetModel;
if (result)
{
sheetModel = t.wb.model.getWorksheetByName(result.sheet);
if (sheetModel)
{
_range = AscCommonExcel.g_oRangeCache.getAscRange(result.range);
}
} else {
_range = AscCommonExcel.g_oRangeCache.getAscRange(_sDataRange);
}
if (!_range) {
_range = AscCommon.rx_defName.test(_sDataRange);
}
if (!_range) {
_range = parserHelp.isTable(_sDataRange, 0, true);
}
return _range ? {range: _range, sheetModel: sheetModel} : false;
};
let wb = this.wbModel;
let alreadyAddedSheet = newSheetName && t.wb.model.getWorksheetByName(newSheetName);
if (newSheetName && !alreadyAddedSheet) {
this._isLockedAddWorksheets(function(res) {
if (res) {
History.Create_NewPoint();
History.StartTransaction();
t._addWorksheetsWithoutLock([newSheetName], wb.getActive());
doInsertXml();
History.EndTransaction();
} else {
//todo
t.sendEvent('asc_onError', c_oAscError.ID.LockedCellPivot, c_oAscError.Level.NoCritical);
}
});
} else {
let _checkRange = doCheckRange(dataRef);
if (_checkRange) {
History.Create_NewPoint();
History.StartTransaction();
doInsertXml(_checkRange.range, _checkRange.sheetModel);
History.EndTransaction();
} else {
this.sendEvent('asc_onError', c_oAscError.ID.PivotLabledColumns, c_oAscError.Level.NoCritical);
}
}
};
spreadsheet_api.prototype._convertFromXml = function (document, callback) {
let stream = null;
this.insertDocumentUrlsData = {
imageMap: null, documents: [document], convertCallback: function (_api, url) {
_api.insertDocumentUrlsData.imageMap = url;
if (!url['output.xlst']) {
_api.endInsertDocumentUrls();
_api.sendEvent("asc_onError", Asc.c_oAscError.ID.DirectUrl,
Asc.c_oAscError.Level.NoCritical);
callback(null);
return;
}
AscCommon.loadFileContent(url['output.xlst'], function (httpRequest) {
if (null === httpRequest || !(stream = AscCommon.initStreamFromResponse(httpRequest))) {
_api.endInsertDocumentUrls();
_api.sendEvent("asc_onError", Asc.c_oAscError.ID.DirectUrl,
Asc.c_oAscError.Level.NoCritical);
callback(null);
return;
}
_api.endInsertDocumentUrls();
}, "arraybuffer");
}, endCallback: function (_api) {
if (stream) {
callback(stream);
} else {
callback(null);
}
}
};
let options = new Asc.asc_CDownloadOptions(Asc.c_oAscFileType.XLSY);
options.isNaturalDownload = true;
options.isGetTextFromUrl = true;
if (document.url) {
options.errorDirect = Asc.c_oAscError.ID.DirectUrl;
}
this.downloadAs(Asc.c_oAscAsyncAction.DownloadAs, options);
};
spreadsheet_api.prototype.asc_TextToColumns = function (options, opt_text, opt_activeRange) {
if (this.canEdit()) {
var ws = this.wb.getWorksheet();
var text = opt_text ? opt_text : ws.getRangeText();
var specialPasteHelper = window['AscCommon'].g_specialPasteHelper;
if (!specialPasteHelper.specialPasteProps) {
specialPasteHelper.specialPasteProps = new Asc.SpecialPasteProps();
}
specialPasteHelper.specialPasteProps.property = Asc.c_oSpecialPasteProps.useTextImport;
specialPasteHelper.specialPasteProps.asc_setAdvancedOptions(options);
//remove last empty string
if (opt_text && opt_text.length > 1 && opt_text[opt_text.length - 1] &&
opt_text[opt_text.length - 1].length === 1 && opt_text[opt_text.length - 1][0] === "") {
opt_text.splice(opt_text.length - 1, 1);
}
var selectionRange;
var activeSheet = null;
if (opt_activeRange) {
var is3dRef = parserHelp.parse3DRef(opt_activeRange);
//TODO вставка на другой лист
var range, sheetModel;
if (is3dRef) {
sheetModel = this.wb.model.getWorksheetByName(is3dRef.sheet);
if (sheetModel) {
range = AscCommonExcel.g_oRangeCache.getAscRange(is3dRef.range);
}
} else {
range = AscCommonExcel.g_oRangeCache.getAscRange(opt_activeRange);
}
if (sheetModel && sheetModel !== ws.model) {
activeSheet = sheetModel;
this.wb.model.nActive = sheetModel.index;
}
if (range) {
if (activeSheet) {
selectionRange = activeSheet.selectionRange.clone();
activeSheet.selectionRange.ranges = [range.clone()];
} else {
selectionRange = ws.model.selectionRange.clone();
ws.model.selectionRange.ranges = [range.clone()];
}
}
}
this.wb.pasteData(AscCommon.c_oAscClipboardDataFormat.Text, text, null, null, true);
if (selectionRange) {
if (activeSheet !== null) {
activeSheet.selectionRange = selectionRange;
this.wb.model.nActive = ws.model.index;
ws.draw();
} else {
ws.cleanSelection();
ws.model.selectionRange = selectionRange;
ws._drawSelection();
}
}
}
};
/**
* @param {string} text
* @param {number | undefined} opt_count
* @param {string[] | undefined} opt_delimiters
* @return {{delimiterChar: string, text: string}}
*/
function getCSVDelimiter(text, opt_count, opt_delimiters) {
//check header: sep=
const textHeadLower = text.substring(0, 5).toLowerCase();
let delimiter;
let offset = 0;
if (textHeadLower.startsWith('sep=')) {
delimiter = text[4];
offset = 5;
} else if (textHeadLower.startsWith('"sep=') && '"' === text[6]) {
delimiter = text[5];
offset = 7;
}
if (undefined !== delimiter) {
//win cr
if ('\r' === text[offset]) {
offset++;
}
//check new line
if ('\n' === text[offset]) {
return {delimiterChar: delimiter, text: text.substring(offset + 1)}
}
}
//Count occurrences of opt_delimiters characters within text
const count = opt_count ? Math.min(opt_count, text.length) : text.length;
const delimiters = opt_delimiters ? opt_delimiters : [",", "\t", ";", ":"];
const counter = {}
for (let i = 0; i < delimiters.length; i += 1) {
counter[delimiters[i]] = 0;
}
let isQuoteOpen = false;
for (let i = 0; i < count; i += 1) {
const sym = text[i];
if (sym === '"') {
isQuoteOpen = !isQuoteOpen;
}
if (!isQuoteOpen && counter[sym] != null) {
counter[sym] += 1;
}
}
let max = 0;
delimiter = delimiters[0];
for (let i in counter) {
if (counter[i] > max) {
max = counter[i];
delimiter = i;
}
}
return {delimiterChar: delimiter, text: text};
}
function getDelimiterEnumByChar(delimiter) {
switch (delimiter) {
case '\t':
return AscCommon.c_oAscCsvDelimiter.Tab;
case ';':
return AscCommon.c_oAscCsvDelimiter.Semicolon;
case ':':
return AscCommon.c_oAscCsvDelimiter.Colon;
case ',':
return AscCommon.c_oAscCsvDelimiter.Comma;
case ' ':
return AscCommon.c_oAscCsvDelimiter.Space;
}
return AscCommon.c_oAscCsvDelimiter.None;
}
/**
* @param {string} text
* @param {number | undefined} opt_count
* @param {string[] | undefined} opt_delimiters
* @return {{delimiterChar: string, text: string}}
*/
spreadsheet_api.prototype.asc_getCSVDelimiter = function (text, opt_count, opt_delimiters) {
let res = getCSVDelimiter(text, opt_count, opt_delimiters);
let delimiter = getDelimiterEnumByChar(res.delimiterChar);
if (AscCommon.c_oAscCsvDelimiter.None !== delimiter) {
return {"text": res.text, "delimiterChar": res.delimiterChar, "delimiter": delimiter};
} else {
return {"text": res.text, "delimiterChar": res.delimiterChar};
}
};
spreadsheet_api.prototype.asc_ShowSpecialPasteButton = function(props) {
if (this.canEdit()) {
this.wb.showSpecialPasteButton(props);
}
};
spreadsheet_api.prototype.asc_UpdateSpecialPasteButton = function(props) {
if (this.canEdit()) {
this.wb.updateSpecialPasteButton(props);
}
};
spreadsheet_api.prototype.asc_HideSpecialPasteButton = function() {
if (this.canEdit()) {
this.wb.hideSpecialPasteButton();
}
};
spreadsheet_api.prototype.asc_Cut = function() {
return AscCommon.g_clipboardBase.Button_Cut();
};
spreadsheet_api.prototype.asc_PasteData = function (_format, data1, data2, text_data, doNotShowButton, callback) {
if (this.canEdit()) {
this.wb.pasteData(_format, data1, data2, text_data, doNotShowButton, callback);
//this.asc_EndMoveSheet2(data1, 1, "test2");
}
};
spreadsheet_api.prototype.asc_CheckCopy = function (_clipboard /* CClipboardData */, _formats) {
return this.wb.checkCopyToClipboard(_clipboard, _formats);
};
spreadsheet_api.prototype.asc_SelectionCut = function () {
if (this.canEdit()) {
this.wb.selectionCut();
}
};
spreadsheet_api.prototype.asc_bIsEmptyClipboard = function() {
var result = this.wb.bIsEmptyClipboard();
this.wb.restoreFocus();
return result;
};
spreadsheet_api.prototype.sync_CanUndoCallback = function(canUndo) {
if (!this.canUndoRedoByRestrictions())
canUndo = false;
this.handlers.trigger("asc_onCanUndoChanged", canUndo);
};
spreadsheet_api.prototype.sync_CanRedoCallback = function(bCanRedo) {
this.handlers.trigger("asc_onCanRedoChanged", bCanRedo);
};
spreadsheet_api.prototype.CheckChangedDocument = function() {
if (true === History.Have_Changes())
{
// дублирование евента. когда будет undo-redo - тогда
// эти евенты начнут отличаться
this.SetDocumentModified(true);
}
else
{
this.SetDocumentModified(false);
}
this._onUpdateDocumentCanSave();
};
spreadsheet_api.prototype.Undo = spreadsheet_api.prototype.asc_Undo = function () {
if (!this.canUndoRedoByRestrictions()) {
return;
}
this.wb.undo();
this.wb.restoreFocus();
};
spreadsheet_api.prototype.Redo = spreadsheet_api.prototype.asc_Redo = function () {
if (!this.canUndoRedoByRestrictions()) {
return;
}
this.wb.redo();
this.wb.restoreFocus();
};
spreadsheet_api.prototype.asc_getCanUndo = function () {
let bCanUndo = AscCommon.History && AscCommon.History.Can_Undo();
if (true !== bCanUndo && this.collaborativeEditing && true === this.collaborativeEditing.Is_Fast() && true !== this.collaborativeEditing.Is_SingleUser()) {
bCanUndo = this.collaborativeEditing.CanUndo();
}
return bCanUndo;
};
spreadsheet_api.prototype.asc_Resize = function () {
var oldScale = AscCommon.AscBrowser.retinaPixelRatio;
AscCommon.AscBrowser.checkZoom();
if (this.wb) {
if (Math.abs(oldScale - AscCommon.AscBrowser.retinaPixelRatio) > 0.001) {
this.wb.changeZoom(null);
this._sendWorkbookStyles();
}
this.wb.resize();
if (AscCommon.g_inputContext) {
AscCommon.g_inputContext.onResize("ws-canvas-outer");
}
}
};
spreadsheet_api.prototype.asc_addAutoFilter = function(styleName, addFormatTableOptionsObj, range) {
var ws = this.wb.getWorksheet();
return ws.addAutoFilter(styleName, addFormatTableOptionsObj, range);
};
spreadsheet_api.prototype.asc_changeAutoFilter = function(tableName, optionType, val) {
if (this.collaborativeEditing.getGlobalLock() || !this.canEdit()) {
return false;
}
var ws = this.wb.getWorksheet();
return ws.changeAutoFilter(tableName, optionType, val);
};
spreadsheet_api.prototype.asc_applyAutoFilter = function(autoFilterObject) {
if (this.collaborativeEditing.getGlobalLock() || !this.canEdit()) {
return false;
}
var ws = this.wb.getWorksheet();
ws.applyAutoFilter(autoFilterObject);
};
spreadsheet_api.prototype.asc_applyAutoFilterByType = function(autoFilterObject) {
if (this.collaborativeEditing.getGlobalLock() || !this.canEdit()) {
return false;
}
var ws = this.wb.getWorksheet();
ws.applyAutoFilterByType(autoFilterObject);
};
spreadsheet_api.prototype.asc_reapplyAutoFilter = function(displayName) {
if (this.collaborativeEditing.getGlobalLock() || !this.canEdit()) {
return false;
}
var ws = this.wb.getWorksheet();
ws.reapplyAutoFilter(displayName);
};
spreadsheet_api.prototype.asc_sortColFilter = function(type, cellId, displayName, color, bIsExpandRange) {
if (this.collaborativeEditing.getGlobalLock() || !this.canEdit()) {
return false;
}
var ws = this.wb.getWorksheet();
ws.sortRange(type, cellId, displayName, color, bIsExpandRange);
};
spreadsheet_api.prototype.asc_getAddFormatTableOptions = function(range) {
var ws = this.wb.getWorksheet();
return ws.getAddFormatTableOptions(range);
};
spreadsheet_api.prototype.asc_clearFilter = function() {
if (this.collaborativeEditing.getGlobalLock() || !this.canEdit()) {
return false;
}
var ws = this.wb.getWorksheet();
return ws.clearFilter();
};
spreadsheet_api.prototype.asc_clearFilterColumn = function(cellId, displayName) {
if (this.collaborativeEditing.getGlobalLock() || !this.canEdit()) {
return false;
}
var ws = this.wb.getWorksheet();
return ws.clearFilterColumn(cellId, displayName);
};
spreadsheet_api.prototype.asc_changeSelectionFormatTable = function(tableName, optionType) {
if (this.collaborativeEditing.getGlobalLock() || !this.canEdit()) {
return false;
}
var ws = this.wb.getWorksheet();
return ws.changeTableSelection(tableName, optionType);
};
spreadsheet_api.prototype.asc_changeFormatTableInfo = function(tableName, optionType, val) {
if (this.collaborativeEditing.getGlobalLock() || !this.canEdit()) {
return false;
}
return this.wb.changeFormatTableInfo(tableName, optionType, val);
};
spreadsheet_api.prototype.asc_applyAutoCorrectOptions = function(val) {
this.wb.applyAutoCorrectOptions(val);
};
spreadsheet_api.prototype.asc_insertCellsInTable = function(tableName, optionType) {
if (this.collaborativeEditing.getGlobalLock() || !this.canEdit()) {
return false;
}
var ws = this.wb.getWorksheet();
return ws.af_insertCellsInTable(tableName, optionType);
};
spreadsheet_api.prototype.asc_deleteCellsInTable = function(tableName, optionType) {
if (this.collaborativeEditing.getGlobalLock() || !this.canEdit()) {
return false;
}
var ws = this.wb.getWorksheet();
return ws.af_deleteCellsInTable(tableName, optionType);
};
spreadsheet_api.prototype.asc_changeDisplayNameTable = function(tableName, newName) {
if (this.collaborativeEditing.getGlobalLock() || !this.canEdit()) {
return false;
}
var ws = this.wb.getWorksheet();
return ws.af_changeDisplayNameTable(tableName, newName);
};
spreadsheet_api.prototype.asc_changeTableRange = function(tableName, range) {
if (this.collaborativeEditing.getGlobalLock() || !this.canEdit()) {
return false;
}
var ws = this.wb.getWorksheet();
return ws.af_changeTableRange(tableName, range);
};
spreadsheet_api.prototype.asc_convertTableToRange = function(tableName) {
if (this.collaborativeEditing.getGlobalLock() || !this.canEdit()) {
return false;
}
var ws = this.wb.getWorksheet();
return ws.af_convertTableToRange(tableName);
};
spreadsheet_api.prototype.asc_getTablePictures = function (props, pivot) {
return this.wb.getTableStyles(props, pivot);
};
spreadsheet_api.prototype.asc_getSlicerPictures = function () {
return this.wb.getSlicerStyles();
};
spreadsheet_api.prototype.asc_setViewMode = function (isViewMode) {
this.isViewMode = !!isViewMode;
if (!this.isLoadFullApi) {
return;
}
if (this.collaborativeEditing) {
this.collaborativeEditing.setViewerMode(isViewMode);
}
if(this.isViewMode) {
this.turnOffSpecialModes();
}
this.checkInputMode();
};
spreadsheet_api.prototype.asc_setFilteringMode = function (mode) {
window['AscCommonExcel'].filteringMode = !!mode;
};
/*
idOption идентификатор дополнительного параметра, пока c_oAscAdvancedOptionsID.CSV.
option - какие свойства применить, пока массив. для CSV объект asc_CTextOptions(codepage, delimiter)
exp: asc_setAdvancedOptions(c_oAscAdvancedOptionsID.CSV, new Asc.asc_CTextOptions(1200, c_oAscCsvDelimiter.Comma) );
*/
spreadsheet_api.prototype.asc_setAdvancedOptions = function(idOption, option) {
// Проверяем тип состояния в данный момент
if (this.advancedOptionsAction !== c_oAscAdvancedOptionsAction.Open) {
return;
}
if (AscCommon.EncryptionWorker.asc_setAdvancedOptions(this, idOption, option)) {
return;
}
var v;
switch (idOption) {
case c_oAscAdvancedOptionsID.CSV:
v = {
"id": this.documentId,
"userid": this.documentUserId,
"format": this.documentFormat,
"c": "reopen",
"title": this.documentTitle,
"delimiter": option.asc_getDelimiter(),
"delimiterChar": option.asc_getDelimiterChar(),
"codepage": option.asc_getCodePageOrDefault(),
"nobase64": true
};
sendCommand(this, null, v);
break;
case c_oAscAdvancedOptionsID.DRM:
this.currentPassword = option.asc_getPassword();
v = {
"id": this.documentId,
"userid": this.documentUserId,
"format": this.documentFormat,
"c": "reopen",
"title": this.documentTitle,
"password": option.asc_getPassword(),
"nobase64": true
};
sendCommand(this, null, v);
break;
}
};
// Опции страницы (для печати)
spreadsheet_api.prototype.asc_setPageOptions = function(options, index) {
var sheetIndex = (undefined !== index && null !== index) ? index : this.wbModel.getActive();
this.wb.getWorksheet(sheetIndex).setPageOptions(options);
};
spreadsheet_api.prototype.asc_savePagePrintOptions = function(arrPagesPrint) {
this.wb.savePagePrintOptions(arrPagesPrint);
};
spreadsheet_api.prototype.getDrawingObjects = function () {
var oController = this.getGraphicController();
if (oController) {
return oController.drawingObjects;
}
};
spreadsheet_api.prototype.getDrawingDocument = function () {
return this.wbModel && this.wbModel.DrawingDocument
};
spreadsheet_api.prototype.asc_getPageOptions = function(index, initPrintTitles, opt_copy) {
var sheetIndex = (undefined !== index && null !== index) ? index : this.wbModel.getActive();
var ws = this.wbModel.getWorksheet(sheetIndex);
var printOptions = ws.PagePrintOptions;
//TODO похожая инициализация в getPrintOptionsJson - сделать общую
if(initPrintTitles && printOptions) {
printOptions.initPrintTitles();
}
if(printOptions && opt_copy) {
printOptions = ws.PagePrintOptions.clone();
printOptions.pageSetup.headerFooter = ws && ws.headerFooter && ws.headerFooter.getForInterface();
var printArea = this.wbModel.getDefinesNames("Print_Area", ws.getId());
printOptions.pageSetup.printArea = printArea ? printArea.clone() : false;
printOptions.printTitlesHeight = ws.PagePrintOptions.printTitlesHeight;
printOptions.printTitlesWidth = ws.PagePrintOptions.printTitlesWidth;
if (ws.PagePrintOptions && ws.PagePrintOptions.pageSetup) {
printOptions.pageSetup.fitToHeight = ws.PagePrintOptions.pageSetup.asc_getFitToHeight();
printOptions.pageSetup.fitToWidth = ws.PagePrintOptions.pageSetup.asc_getFitToWidth();
}
}
return printOptions;
};
spreadsheet_api.prototype.asc_setPageOption = function (func, val, index) {
if (this.collaborativeEditing.getGlobalLock() || !this.canEdit()) {
return false;
}
var sheetIndex = (undefined !== index && null !== index) ? index : this.wbModel.getActive();
var ws = this.wb.getWorksheet(sheetIndex);
ws.setPageOption(func, val);
};
spreadsheet_api.prototype.asc_changeDocSize = function (width, height, index) {
if (this.collaborativeEditing.getGlobalLock() || !this.canEdit()) {
return false;
}
var sheetIndex = (undefined !== index && null !== index) ? index : this.wbModel.getActive();
var ws = this.wb.getWorksheet(sheetIndex);
ws.changeDocSize(width, height);
};
spreadsheet_api.prototype.asc_changePageMargins = function (oMargins, bHorCentered, bVerCentered, nHeader, nFooter, index) {
if (this.collaborativeEditing.getGlobalLock() || !this.canEdit()) {
return false;
}
var sheetIndex = (undefined !== index && null !== index) ? index : this.wbModel.getActive();
var ws = this.wb.getWorksheet(sheetIndex);
ws.changePageMargins(oMargins, bHorCentered, bVerCentered, nHeader, nFooter);
};
spreadsheet_api.prototype.asc_changePageOrient = function (isPortrait, index) {
if (this.collaborativeEditing.getGlobalLock() || !this.canEdit()) {
return false;
}
var sheetIndex = (undefined !== index && null !== index) ? index : this.wbModel.getActive();
var ws = this.wb.getWorksheet(sheetIndex);
if (isPortrait) {
ws.changePageOrient(Asc.c_oAscPageOrientation.PagePortrait);
} else {
ws.changePageOrient(Asc.c_oAscPageOrientation.PageLandscape);
}
};
spreadsheet_api.prototype.asc_SetPrintHeadings = function(val, index) {
if (this.collaborativeEditing.getGlobalLock() || !this.canEdit()) {
return false;
}
var sheetIndex = (undefined !== index && null !== index) ? index : this.wbModel.getActive();
var ws = this.wb.getWorksheet(sheetIndex);
ws.setPrintHeadings(val);
};
spreadsheet_api.prototype.asc_SetPrintGridlines = function(val, index) {
if (this.collaborativeEditing.getGlobalLock() || !this.canEdit()) {
return false;
}
var sheetIndex = (undefined !== index && null !== index) ? index : this.wbModel.getActive();
var ws = this.wb.getWorksheet(sheetIndex);
ws.setGridLines(val);
};
spreadsheet_api.prototype.asc_changePrintTitles = function (cols, rows, index) {
if (this.collaborativeEditing.getGlobalLock() || !this.canEdit()) {
return false;
}
var sheetIndex = (undefined !== index && null !== index) ? index : this.wbModel.getActive();
var ws = this.wb.getWorksheet(sheetIndex);
ws.changePrintTitles(cols, rows);
};
spreadsheet_api.prototype.asc_getPrintTitlesRange = function (prop, byHeight, index) {
var sheetIndex = (undefined !== index && null !== index) ? index : this.wbModel.getActive();
var ws = this.wb.getWorksheet(sheetIndex);
return ws.getPrintTitlesRange(prop, byHeight);
};
spreadsheet_api.prototype._onNeedParams = function(data, opt_isPassword) {
var t = this;
// Проверяем, возможно нам пришли опции для CSV
if (this.documentOpenOptions && !opt_isPassword) {
var codePageCsv = AscCommon.c_oAscEncodingsMap[this.documentOpenOptions["codePage"]] || AscCommon.c_oAscCodePageUtf8, delimiterCsv = this.documentOpenOptions["delimiter"],
delimiterCharCsv = this.documentOpenOptions["delimiterChar"];
if (null != codePageCsv && (null != delimiterCsv || null != delimiterCharCsv)) {
this.asc_setAdvancedOptions(c_oAscAdvancedOptionsID.CSV, new asc.asc_CTextOptions(codePageCsv, delimiterCsv, delimiterCharCsv));
return;
}
}
if (opt_isPassword) {
if (t.handlers.hasTrigger("asc_onAdvancedOptions")) {
asc["editor"].sendEvent("asc_onDocumentPassword", true);
t.handlers.trigger("asc_onAdvancedOptions", c_oAscAdvancedOptionsID.DRM);
} else {
t.handlers.trigger("asc_onError", c_oAscError.ID.ConvertationPassword, c_oAscError.Level.Critical);
}
} else {
if (t.handlers.hasTrigger("asc_onAdvancedOptions")) {
// ToDo разделитель пока только "," http://bugzilla.onlyoffice.com/show_bug.cgi?id=31009
var cp = {
'codepage': AscCommon.c_oAscCodePageNone, "delimiter": AscCommon.c_oAscCsvDelimiter.Comma,
'encodings': AscCommon.getEncodingParams()
};
if (data && typeof Blob !== 'undefined' && typeof FileReader !== 'undefined') {
function applyBuffer(dataUint) {
var bom = AscCommon.getEncodingByBOM(dataUint);
if (AscCommon.c_oAscCodePageNone !== bom.encoding) {
cp['codepage'] = bom.encoding;
cp['data'] = dataUint.subarray(bom.size);
} else {
cp['data'] = dataUint;
}
}
if (data.buffer) {
applyBuffer(data);
t.handlers.trigger("asc_onAdvancedOptions", c_oAscAdvancedOptionsID.CSV, new AscCommon.asc_CAdvancedOptions(cp));
} else {
AscCommon.loadFileContent(data, function(httpRequest) {
if (httpRequest && httpRequest.response) {
let data = httpRequest.response;
applyBuffer(new Uint8Array(data));
t.handlers.trigger("asc_onAdvancedOptions", c_oAscAdvancedOptionsID.CSV, new AscCommon.asc_CAdvancedOptions(cp));
} else {
t.handlers.trigger("asc_onError", c_oAscError.ID.Unknown, c_oAscError.Level.Critical);
}
}, "arraybuffer");
}
} else {
t.handlers.trigger("asc_onAdvancedOptions", c_oAscAdvancedOptionsID.CSV, new AscCommon.asc_CAdvancedOptions(cp));
}
} else {
this.asc_setAdvancedOptions(c_oAscAdvancedOptionsID.CSV, new asc.asc_CTextOptions(AscCommon.c_oAscCodePageUtf8, AscCommon.c_oAscCsvDelimiter.Comma));
}
}
};
spreadsheet_api.prototype._onEndOpen = function() {
var t = this;
if (this.openingEnd.bin && this.openingEnd.xlsx && this.openDocumentFromZip(t.wbModel, this.openingEnd.data)) {
if (this.openingEnd.perfStart > 0) {
let perfEnd = performance.now();
AscCommon.sendClientLog("debug", AscCommon.getClientInfoString("onOpenDocument", perfEnd - this.openingEnd.perfStart), this);
this.openingEnd.perfStart = 0;
}
//opening xlsx depends on getBinaryOtherTableGVar(called after Editor.bin)
Asc.ReadDefTableStyles(t.wbModel);
g_oIdCounter.Set_Load(false);
AscCommon.checkCultureInfoFontPicker();
AscCommonExcel.checkStylesNames(t.wbModel.CellStyles);
t.FontLoader.LoadDocumentFonts(t.wbModel.generateFontMap2());
// Какая-то непонятная заглушка, чтобы не падало в ipad
if (t.isMobileVersion) {
AscCommon.AscBrowser.isSafariMacOs = false;
AscCommon.PasteElementsId.PASTE_ELEMENT_ID = "wrd_pastebin";
AscCommon.PasteElementsId.ELEMENT_DISPAY_STYLE = "none";
}
}
};
spreadsheet_api.prototype._openOnClient = function() {
if(this.isOpenOOXInBrowser) {
return;
}
var t = this;
if (this.openingEnd.xlsxStart) {
return;
}
this.openingEnd.xlsxStart = true;
var url = AscCommon.g_oDocumentUrls.getUrl('Editor.xlsx');
if (url) {
AscCommon.loadFileContent(url, function(httpRequest) {
if (httpRequest && httpRequest.response) {
t.openingEnd.xlsx = true;
t.openingEnd.data = httpRequest.response;
t._onEndOpen();
} else {
t.sendEvent('asc_onError', c_oAscError.ID.Unknown, c_oAscError.Level.Critical);
}
}, "arraybuffer");
} else {
t.openingEnd.xlsx = true;
t._onEndOpen();
}
};
spreadsheet_api.prototype._downloadAs = function(actionType, options, oAdditionalData, dataContainer, downloadType) {
var fileType = options.fileType;
if (this.isCloudSaveAsLocalToDrawingFormat(actionType, fileType)) {
var printPagesData, pdfPrinterMemory, t = this;
this.wb._executeWithoutZoom(function () {
let printOptions = options.advancedOptions;
if (fileType & 0x0400) {
printOptions = new Asc.asc_CAdjustPrint();
printOptions.printType = Asc.c_oAscPrintType.EntireWorkbook;
printOptions.ignorePrintArea = true;
printOptions.isOnlyFirstPage = false;
}
printPagesData = t.wb.calcPagesPrint(printOptions);
pdfPrinterMemory = t.wb.printSheets(printPagesData, null, options.advancedOptions).DocumentRenderer.Memory;
});
this.localSaveToDrawingFormat(pdfPrinterMemory.GetBase64Memory(), fileType);
return true;
}
if (c_oAscFileType.PDF === fileType || c_oAscFileType.PDFA === fileType) {
var printPagesData, pdfPrinterMemory, t = this;
this.wb._executeWithoutZoom(function () {
t.wb.printPreviewState.advancedOptions = options.advancedOptions;
printPagesData = t.wb.calcPagesPrint(options.advancedOptions);
pdfPrinterMemory = t.wb.printSheets(printPagesData, null, options.advancedOptions).DocumentRenderer.Memory;
t.wb.printPreviewState.advancedOptions = null;
});
dataContainer.data = oAdditionalData["nobase64"] ? pdfPrinterMemory.GetData() : pdfPrinterMemory.GetBase64Memory();
} else if (this.insertDocumentUrlsData) {
var last = this.insertDocumentUrlsData.documents.shift();
oAdditionalData['url'] = last.url;
oAdditionalData['format'] = last.format;
if (last.token) {
oAdditionalData['tokenDownload'] = last.token;
//remove to reduce message size
oAdditionalData['tokenSession'] = undefined;
}
oAdditionalData['outputurls']= true;
// ToDo select txt params
oAdditionalData["codepage"] = AscCommon.c_oAscCodePageUtf8;
dataContainer.data = last.data;
} else if(this.isOpenOOXInBrowser && this["asc_isSupportFeature"]("ooxml")) {
var t = this;
var title = this.documentTitle;
AscCommonExcel.executeInR1C1Mode(false, function () {
t.saveLogicDocumentToZip(undefined, undefined, function(data) {
if (data) {
if (c_oAscFileType.XLSX === fileType && !window.isCloudCryptoDownloadAs) {
AscCommon.DownloadFileFromBytes(data, title, AscCommon.openXml.GetMimeType("xlsx"));
} else {
dataContainer.data = data;
if (window.isCloudCryptoDownloadAs)
{
var sParamXml = ("" + oAdditionalData["codepage"] + "");
sParamXml += ("" + oAdditionalData["delimiter"] + "");
window["AscDesktopEditor"]["CryptoDownloadAs"](dataContainer.data, fileType, sParamXml);
return true;
}
t._downloadAsUsingServer(actionType, options, oAdditionalData, dataContainer, downloadType);
return;
}
} else {
t.sendEvent("asc_onError", Asc.c_oAscError.ID.Unknown, Asc.c_oAscError.Level.NoCritical);
}
if (actionType)
{
t.sync_EndAction(c_oAscAsyncActionType.BlockInteraction, actionType);
}
});
});
return true;
} else {
var oBinaryFileWriter = new AscCommonExcel.BinaryFileWriter(this.wbModel);
if (c_oAscFileType.CSV === fileType) {
if (options.advancedOptions instanceof asc.asc_CTextOptions) {
oAdditionalData["codepage"] = options.advancedOptions.asc_getCodePage();
oAdditionalData["delimiter"] = options.advancedOptions.asc_getDelimiter();
oAdditionalData["delimiterChar"] = options.advancedOptions.asc_getDelimiterChar();
}
}
//перед записью подменяю topLeftCell на тот, который видим
this.wb.executeWithCurrentTopLeftCell(function () {
dataContainer.data = oBinaryFileWriter.Write(oAdditionalData["nobase64"]);
});
}
if (window.isCloudCryptoDownloadAs) {
var sParamXml = ("" + oAdditionalData["codepage"] + "");
sParamXml += ("" + oAdditionalData["delimiter"] + "");
window["AscDesktopEditor"]["CryptoDownloadAs"](dataContainer.data, fileType, sParamXml);
return true;
}
};
spreadsheet_api.prototype.asc_initPrintPreview = function (containerId, options) {
var curElem = document.getElementById(containerId);
if (curElem) {
var isInitCanvas = false;
var canvasId = containerId + "-canvas";
var canvas = document.getElementById(canvasId);
if (!canvas) {
canvas = document.createElement('canvas');
canvas.id = canvasId;
canvas.width = curElem.clientWidth;
canvas.height = curElem.clientHeight;
//obj.canvas.style.width = AscCommon.AscBrowser.convertToRetinaValue(t.parentWidth) + "px";
canvas.style.border = "1px solid";
canvas.style.borderColor = "#" + this.wb.defaults.worksheetView.cells.defaultState.border.get_hex();
curElem.appendChild(canvas);
isInitCanvas = true;
}
if (!this.wb.printPreviewState.getCtx() || isInitCanvas) {
this.wb.printPreviewState.setCtx(new asc.DrawingContext({
canvas: canvas, units: 0/*px*/, fmgrGraphics: this.wb.fmgrGraphics, font: this.wb.m_oFont
}));
}
}
this.wb.printPreviewState.isDrawPrintPreview = true;
this.wb.printPreviewState.init();
var pages = this.wb.calcPagesPrint(options ? options.advancedOptions : null);
this.wb.printPreviewState.setPages(pages);
this.wb.printPreviewState.setAdvancedOptions(options && options.advancedOptions);
this.wb.printPreviewState.isDrawPrintPreview = false;
if (pages.arrPages.length) {
this.asc_drawPrintPreview(0);
}
return pages.arrPages.length;
};
spreadsheet_api.prototype.asc_updatePrintPreview = function (options) {
this.wb.printPreviewState.isDrawPrintPreview = true;
var pages = this.wb.calcPagesPrint(options.advancedOptions);
this.wb.printPreviewState.setPages(pages);
this.wb.printPreviewState.setAdvancedOptions(options && options.advancedOptions);
this.wb.printPreviewState.isDrawPrintPreview = false;
return pages.arrPages.length;
};
spreadsheet_api.prototype.asc_drawPrintPreview = function (index, indexSheet) {
if (this.wb.printPreviewState.isDrawPrintPreview) {
return;
}
this.wb.printPreviewState.isDrawPrintPreview = true;
if (indexSheet != null) {
index = this.wb.printPreviewState.getIndexPageByIndexSheet(indexSheet);
}
if (index == null) {
index = this.wb.printPreviewState.activePage;
}
this.wb.printPreviewState.setPage(index, true);
this.wb.printSheetPrintPreview(index);
var curPage = this.wb.printPreviewState.getPage(index);
//возвращаю инфомарцию об активном листе, который печатаем
var indexActiveWs = curPage && curPage.indexWorksheet;
if (indexActiveWs === undefined) {
indexActiveWs = null !== this.wb.printPreviewState.realActiveSheet ? this.wb.printPreviewState.realActiveSheet : this.wbModel.getActive();
}
this.handlers.trigger("asc_onPrintPreviewSheetChanged", indexActiveWs);
this.handlers.trigger("asc_onPrintPreviewPageChanged", index);
this.wb.printPreviewState.isDrawPrintPreview = false;
};
spreadsheet_api.prototype.asc_closePrintPreview = function () {
this.wb.printPreviewState.clean(true);
};
spreadsheet_api.prototype.processSavedFile = function(url, downloadType, filetype)
{
if (this.insertDocumentUrlsData && this.insertDocumentUrlsData.convertCallback)
{
this.insertDocumentUrlsData.convertCallback(this, url);
}
else
{
AscCommon.baseEditorsApi.prototype.processSavedFile.call(this, url, downloadType, filetype);
}
};
spreadsheet_api.prototype.asc_isDocumentModified = function() {
if (!this.canSave || this.asc_getCellEditMode()) {
// Пока идет сохранение или редактирование ячейки, мы не закрываем документ
return true;
} else if (History && History.Have_Changes) {
return History.Have_Changes();
}
return false;
};
spreadsheet_api.prototype.isDocumentModified = function() {
return this.asc_isDocumentModified();
};
// Actions and callbacks interface
/*
* asc_onStartAction (type, id)
* asc_onEndAction (type, id)
* asc_onInitEditorFonts (gui_fonts)
* asc_onInitEditorStyles (gui_styles)
* asc_onOpenDocumentProgress (AscCommon.COpenProgress)
* asc_onAdvancedOptions (c_oAscAdvancedOptionsID, asc_CAdvancedOptions) - эвент на получение дополнительных опций (открытие/сохранение CSV)
* asc_onError (c_oAscError.ID, c_oAscError.Level) - эвент об ошибке
* asc_onEditCell (Asc.c_oAscCellEditorState) - эвент на редактирование ячейки с состоянием (переходами из формулы и обратно)
* asc_onEditorSelectionChanged (CellXfs) - эвент на смену информации о выделении в редакторе ячейки
* asc_onSelectionChanged (asc_CCellInfo) - эвент на смену информации о выделении
* asc_onSelectionNameChanged (sName) - эвент на смену имени выделения (Id-ячейки, число выделенных столбцов/строк, имя диаграммы и др.)
* asc_onSelection
*
* Changed (asc_CSelectionMathInfo) - эвент на смену математической информации о выделении
* asc_onZoomChanged (zoom)
* asc_onSheetsChanged () - эвент на обновление списка листов
* asc_onActiveSheetChanged (indexActiveSheet) - эвент на обновление активного листа
* asc_onCanUndoChanged (bCanUndo) - эвент на обновление возможности undo
* asc_onCanRedoChanged (bCanRedo) - эвент на обновление возможности redo
* asc_onSaveUrl (sUrl, callback(hasError)) - эвент на сохранение файла на сервер по url
* asc_onDocumentModifiedChanged(bIsModified) - эвент на обновление статуса "изменен ли файл"
* asc_onMouseMove (asc_CMouseMoveData) - эвент на наведение мышкой на гиперлинк или комментарий
* asc_onHyperlinkClick (sUrl) - эвент на нажатие гиперлинка
* asc_onCoAuthoringDisconnect () - эвент об отключении от сервера без попытки reconnect
* asc_onSelectionRangeChanged (selectRange) - эвент о выборе диапазона для диаграммы (после нажатия кнопки выбора)
* asc_onRenameCellTextEnd (countCellsFind, countCellsReplace) - эвент об окончании замены текста в ячейках (мы не можем сразу прислать ответ)
* asc_onWorkbookLocked (result) - эвент залочена ли работа с листами или нет
* asc_onWorksheetLocked (index, result) - эвент залочен ли лист или нет
* asc_onGetEditorPermissions (permission) - эвент о правах редактора
* asc_onStopFormatPainter () - эвент об окончании форматирования по образцу
* asc_onUpdateSheetViewSettings () - эвент об обновлении свойств листа (закрепленная область, показывать сетку/заголовки)
* asc_onUpdateTabColor (index) - эвент об обновлении цвета иконки листа
* asc_onDocumentCanSaveChanged (bIsCanSave) - эвент об обновлении статуса "можно ли сохранять файл"
* asc_onDocumentUpdateVersion (callback) - эвент о том, что файл собрался и не может больше редактироваться
* asc_onContextMenu (event) - эвент на контекстное меню
* asc_onDocumentContentReady () - эвент об окончании загрузки документа
* asc_onFilterInfo (countFilter, countRecords) - send count filtered and all records
* asc_onLockDocumentProps/asc_onUnLockDocumentProps - эвент о том, что залочены опции layout
* asc_onUpdateDocumentProps - эвент о том, что необходимо обновить данные во вкладке layout
* asc_onLockPrintArea/asc_onUnLockPrintArea - эвент о локе в меню опции print area во вкладке layout
* asc_onPrintPreviewSheetChanged - эвент о смене печатаемого листа при предварительной печати
* asc_onPrintPreviewPageChanged - эвент о смене печатаемой страницы при предварительной печати
* asc_onAddCustomFunction () - add new custom function event
*/
spreadsheet_api.prototype.asc_registerCallback = function(name, callback, replaceOldCallback) {
this.handlers.add(name, callback, replaceOldCallback);
};
spreadsheet_api.prototype.asc_unregisterCallback = function(name, callback) {
this.handlers.remove(name, callback);
};
spreadsheet_api.prototype.asc_SetDocumentPlaceChangedEnabled = function(val) {
this.wb.setDocumentPlaceChangedEnabled(val);
};
spreadsheet_api.prototype.asc_SetFastCollaborative = function(bFast) {
if (this.collaborativeEditing) {
AscCommon.CollaborativeEditing.Set_Fast(bFast);
this.collaborativeEditing.setFast(bFast);
}
};
spreadsheet_api.prototype.initCollaborativeEditing = function(opt_handlers)
{
if (AscCommon.CollaborativeEditing)
return;
this._coAuthoringInitCollaborativeEditing(opt_handlers);
AscCommon.CollaborativeEditing = this.collaborativeEditing;
};
spreadsheet_api.prototype.asc_setThumbnailStylesSizes = function (width, height) {
this.styleThumbnailWidth = width;
this.styleThumbnailHeight = height;
};
// Посылает эвент о том, что обновились листы
spreadsheet_api.prototype.sheetsChanged = function() {
this.handlers.trigger("asc_onSheetsChanged");
};
spreadsheet_api.prototype.asyncFontsDocumentStartLoaded = function(blockType) {
this.OpenDocumentProgress.Type = c_oAscAsyncAction.LoadDocumentFonts;
this.OpenDocumentProgress.FontsCount = this.FontLoader.fonts_loading.length;
this.OpenDocumentProgress.CurrentFont = 0;
this.sync_StartAction(undefined === blockType ? c_oAscAsyncActionType.BlockInteraction : blockType, c_oAscAsyncAction.LoadDocumentFonts);
};
spreadsheet_api.prototype.asyncFontsDocumentEndLoaded = function(blockType) {
this.sync_EndAction(undefined === blockType ? c_oAscAsyncActionType.BlockInteraction : blockType, c_oAscAsyncAction.LoadDocumentFonts);
if (this.asyncMethodCallback !== undefined) {
this.asyncMethodCallback();
this.asyncMethodCallback = undefined;
} else {
// Шрифты загрузились, возможно стоит подождать совместное редактирование
this.FontLoadWaitComplete = true;
this._openDocumentEndCallback();
if (this.fAfterLoad) {
this.fAfterLoad();
}
}
};
spreadsheet_api.prototype.asyncFontEndLoaded = function(font) {
this.sync_EndAction(c_oAscAsyncActionType.Information, c_oAscAsyncAction.LoadFont);
};
spreadsheet_api.prototype._loadFonts = function(fonts, callback) {
if (window["NATIVE_EDITOR_ENJINE"]) {
return callback.call(this);
}
this.asyncMethodCallback = callback;
var arrLoadFonts = [];
for (var i in fonts)
arrLoadFonts.push(new AscFonts.CFont(i));
AscFonts.FontPickerByCharacter.extendFonts(arrLoadFonts);
this.FontLoader.LoadDocumentFonts2(arrLoadFonts);
};
spreadsheet_api.prototype.openDocument = function(file) {
//todo native.js -> openDocument
this.openingEnd.perfStart = performance.now();
if (file.changes && this.VersionHistory) {
this.VersionHistory.changes = file.changes;
}
this.isOpenOOXInBrowser = this["asc_isSupportFeature"]("ooxml") && AscCommon.checkOOXMLSignature(file.data);
if (this.isOpenOOXInBrowser) {
this.openOOXInBrowserZip = file.data;
}
this._openDocument(file.data);
this._openOnClient();
};
spreadsheet_api.prototype.asc_CloseFile = function()
{
History.Clear();
g_oIdCounter.Clear();
g_oTableId.Clear();
AscCommonExcel.resetDrawingContextFonts();
AscCommonExcel.g_StyleCache.Clear();
AscCommon.CollaborativeEditing.Clear();
AscCommon.g_oDocumentUrls.Clear();
this.openingEnd = {bin: false, xlsxStart: false, xlsx: false, data: null};
this.isApplyChangesOnOpenEnabled = true;
this.isDocumentLoadComplete = false;
this.FontLoadWaitComplete = false;
this.turnOffSpecialModes();
//удаляю весь handlersList, добавленный при инициализации wbView
//потому что старый при открытии использовать нельзя(в случае с истрией версий при повторном открытии файла там остаются старые функции от предыдущего workbookview)
//по идее нужно делать его полное зануление, а при открытии создавать заново. но есть функции, которые
//добавляются в интерфейсе и в случае с историей версий заново не добавляются
this.wb.removeHandlersList();
if (this.isEditOleMode) {
this.wb.removeEventListeners();
var cellEditor = this.wb.cellEditor;
if (this.wb.cellEditor) {
cellEditor.removeEventListeners();
}
}
if (this.wbModel.DrawingDocument) {
this.wbModel.DrawingDocument.CloseFile();
}
if(this.wb.MobileTouchManager) {
this.wb.MobileTouchManager.Destroy();
}
this.sendEvent("asc_onCloseFile");
};
spreadsheet_api.prototype.openDocumentFromZip = function (wb, data) {
var t = this;
if (!data) {
return true;
}
var openXml = AscCommon.openXml;
var StaxParser = AscCommon.StaxParser;
var pivotCaches = {};
var xmlParserContext = new AscCommon.XmlParserContext();
xmlParserContext.DrawingDocument = this.wbModel.DrawingDocument;
var initOpenManager = xmlParserContext.InitOpenManager = AscCommonExcel.InitOpenManager ? new AscCommonExcel.InitOpenManager(null, wb) : null;
var wbPart = null;
var wbXml = null;
let jsZlib = new AscCommon.ZLib();
if (!jsZlib.open(data)) {
return false;
}
xmlParserContext.zip = jsZlib;
//check fonts inside
AscFonts.IsCheckSymbols = true;
AscCommonExcel.executeInR1C1Mode(false, function () {
var doc = new openXml.OpenXmlPackage(jsZlib, null);
var reader, i, j;
//workbook
wbPart = doc.getPartByRelationshipType(openXml.Types.workbook.relationType);
if (wbPart) {
var contentWorkbook = wbPart.getDocumentContent();
wbXml = new AscCommonExcel.CT_Workbook(wb);
reader = new StaxParser(contentWorkbook, wbPart, xmlParserContext);
if (t.isOpenOOXInBrowser) {
wbXml.fromXml(reader);
} else {
wbXml.fromXmlSimple(reader);
}
}
if (t.isOpenOOXInBrowser) {
//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);
}
}
//metadata
if (AscCommonExcel.bIsSupportDynamicArrays) {
let metaData = wbPart.getPartByRelationshipType(openXml.Types.metadata.relationType);
if (metaData) {
let contentMetaData = metaData.getDocumentContent();
wb.metadata = new AscCommonExcel.CMetadata();
reader = new StaxParser(contentMetaData, metaData, xmlParserContext);
wb.metadata.fromXml(reader);
}
}
//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 && 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);
if (oExternalReference.val) {
if (oExternalReference.val.externalBook) {
var relationship = externalWorkbookPart.getRelationship(oExternalReference.val.externalBook.Id);
//подменяем id на target
if (relationship && relationship.targetFullName) {
oExternalReference.val.externalBook.Id = AscCommonExcel.decodeXmlPath(relationship.targetFullName);
}
wb.externalReferences.push(oExternalReference.val.externalBook);
}
}
}
}
}
});
}
//extLxt(slicercache inside)
if (wbXml && 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;
}
}
}
});
}
if (ext.timelineCachesIds) {
ext.timelineCachesIds.forEach(function (timelineCacheId) {
if (null !== timelineCacheId) {
var timelineCacheWorkbookPart = wbPart.getPartById(timelineCacheId);
if (timelineCacheWorkbookPart) {
var contentTimelineCache = timelineCacheWorkbookPart.getDocumentContent();
if (contentTimelineCache) {
var oTimelineCacheDefinition = new AscCommonExcel.CTimelineCacheDefinition();
var reader = new StaxParser(contentTimelineCache, timelineCacheWorkbookPart, xmlParserContext);
oTimelineCacheDefinition.fromXml(reader);
wb.timelineCaches.push(oTimelineCacheDefinition);
}
}
}
});
}
});
}
//not ext slicer caches
if (wbXml && 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
};
xmlParserContext.InitOpenManager.InitStyleManager(oStyleObject, aCellXfs);
dxfs = oStyleObject.aDxfs;
wb.oNumFmtsOpen = oStyleObject.oNumFmts;
wb.dxfsOpen = oStyleObject.aDxfs;
if (styleSheet.oTimelineStyles) {
wb.TimelineStyles = styleSheet.oTimelineStyles;
}
}
}
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 = new Uint8Array(contentVbaProject);
}
}
//person list
var personListPart = wbPart.getPartByRelationshipType(openXml.Types.person.relationType);
var personList;
if (personListPart) {
var contentPersonList = personListPart.getDocumentContent();
if (contentPersonList) {
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);
}
}
}
//pivotCaches
if (wbXml && 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) {
var pivotTableCacheRecords = new Asc.CT_PivotCacheRecords();
new openXml.SaxParserBase().parse(contentCacheRecords, pivotTableCacheRecords);
pivotTableCacheDefinition.cacheRecords = pivotTableCacheRecords;
}
}
}
}
}
});
}
//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 - из бинарника не читается, и не пишется в бинарник. реализовать позже
//Custom xml
if (t.isOpenOOXInBrowser) {
//папка customXml, в неё лежат item[n].xml, itemProps[n].xml + rels
//в Content_Types пишется только ссылка на itemProps в слудующем виде:
//
//rels(которые внутри customXml) лежит ссылка на itemProps в следующем виде:
//
//workbook.xml.rels лежит ссылка на item в следующем виде:
//
//TODO проверить когда несколько ссылок на customXml
var customXmlParts = wbPart.getPartsByRelationshipType(openXml.Types.customXml.relationType);
if (customXmlParts) {
for (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 = [];
}
wb.customXmls.push(custom);
}
}
}
//sheets
var wsParts = [];
if (t.isOpenOOXInBrowser && wbXml && wbXml.sheets) {
//вначале беру все листы, потом запрашиваю контент каждого из них.
//связано с проблемой внтури парсера, на примере файла 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);
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);
}
}
//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 (null != oNewTable.Ref && null != oNewTable.DisplayName) {
ws.workbook.dependencyFormulas.addTableName(ws, oNewTable, true);
}
ws.TableParts.push(oNewTable);
}
//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;
}
//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 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);
}
AscCommonExcel.PrepareComments(ws, xmlParserContext, comments, pThreadedComments, personList);
var timelines = wsPart.getPartsByRelationshipType(openXml.Types.timelines.relationType);
if (timelines && timelines.length) {
let contentTimeline = timelines[i].getDocumentContent();
let oNewTimelines = new AscCommonExcel.CT_CTimelines();
reader = new StaxParser(contentTimeline, oNewTimelines, xmlParserContext);
oNewTimelines.fromXml(reader);
if (oNewTimelines.timelines && oNewTimelines.timelines.length) {
ws.timelines = oNewTimelines.timelines;
}
}
}
}
}
});
} else if(wbXml && wbXml.sheets) {
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 (ws && 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 (t.isOpenOOXInBrowser) {
//defined names
if (wbXml && 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 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 listenerId in tmp.siFormulas) {
if (tmp.siFormulas.hasOwnProperty(listenerId)) {
tmp.siFormulas[listenerId].buildDependencies();
}
}
}
}
};
//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 (Asc["editor"] && Asc["editor"].wb) {
wb.init(initOpenManager.oReadResult.tableCustomFunc, initOpenManager.oReadResult.tableIds, initOpenManager.oReadResult.sheetIds, true);
}
}
}
if (t.isOpenOOXInBrowser) {
initOpenManager.readDefStyles(wb, wb.CellStyles.DefaultStyles);
}
wb.initPostOpenZip(pivotCaches, xmlParserContext);
});
AscFonts.IsCheckSymbols = false;
jsZlib.close();
//clean up
openXml.SaxParserDataTransfer = {};
return true;
};
spreadsheet_api.prototype.openDocumentFromZip2 = function (wb, data) {
//TODO зачитать sharedStrings
if (!data || !this["asc_isSupportFeature"]("ooxml")) {
return null;
}
var openXml = AscCommon.openXml;
var StaxParser = AscCommon.StaxParser;
var res = [];
AscFormat.ExecuteNoHistory(function() {
var xmlParserContext = new AscCommon.XmlParserContext();
xmlParserContext.DrawingDocument = this.wbModel.DrawingDocument;
xmlParserContext.InitOpenManager = AscCommonExcel.InitOpenManager ? new AscCommonExcel.InitOpenManager(null, wb) : null;
if (!xmlParserContext.InitOpenManager) {
xmlParserContext.InitOpenManager = {};
}
xmlParserContext.InitOpenManager.aCellXfs = [];
xmlParserContext.InitOpenManager.Dxfs = [];
var wbPart = null;
var wbXml = null;
if (!window.nativeZlibEngine || !window.nativeZlibEngine.open(data)) {
return false;
}
xmlParserContext.zip = window.nativeZlibEngine;
var doc = new openXml.OpenXmlPackage(window.nativeZlibEngine, null);
//workbook
wbPart = doc.getPartByRelationshipType(openXml.Types.workbook.relationType);
if (wbPart) {
var contentWorkbook = wbPart.getDocumentContent();
AscCommonExcel.executeInR1C1Mode(false, function () {
wbXml = new AscCommonExcel.CT_Workbook(wb);
var reader = new StaxParser(contentWorkbook, wbPart, xmlParserContext);
wbXml.fromXml(reader, {"sheets" : 1});
});
}
//sharedString
var sharedStringPart = wbPart.getPartByRelationshipType(openXml.Types.sharedStringTable.relationType);
if (sharedStringPart) {
var contentSharedStrings = sharedStringPart.getDocumentContent();
if (contentSharedStrings) {
var sharedStrings = new AscCommonExcel.CT_SharedStrings();
var reader = new StaxParser(contentSharedStrings, sharedStringPart, xmlParserContext);
sharedStrings.fromXml(reader);
}
}
//sheets
if (wbXml && wbXml.sheets) {
var wsParts = [];
wbXml.sheets.forEach(function (wbSheetXml) {
//TODO нужно отсеять только необходимые листы
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) {
//TODO нужно отсеять только необходимые дипапазоны
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);
if (contentSheetXml) {
AscCommonExcel.executeInR1C1Mode(false, function () {
var reader = new StaxParser(contentSheetXml, wsPart, xmlParserContext);
ws.fromXml(reader);
});
}
xmlParserContext.InitOpenManager.putSheetAfterRead(wb, ws);
res.push(ws);
}
}
});
}
if (wbXml && 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 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 listenerId in tmp.siFormulas) {
if (tmp.siFormulas.hasOwnProperty(listenerId)) {
tmp.siFormulas[listenerId].buildDependencies();
}
}
}
}
};
xmlParserContext.InitOpenManager.aCellXfs = [];
xmlParserContext.InitOpenManager.Dxfs = [];
readSheetDataExternal(true);
}, this, []);
return res;
};
// Эвент о пришедщих изменениях
spreadsheet_api.prototype.syncCollaborativeChanges = function() {
// Для быстрого сохранения уведомлять не нужно.
if (!this.collaborativeEditing.getFast()) {
this.handlers.trigger("asc_onCollaborativeChanges");
}
};
// Применение изменений документа, пришедших при открытии
// Их нужно применять после того, как мы создали WorkbookView
// т.к. автофильтры, диаграммы, изображения и комментарии завязаны на WorksheetView (ToDo переделать)
spreadsheet_api.prototype._applyFirstLoadChanges = function() {
if (this.isDocumentLoadComplete) {
return;
}
if (this.collaborativeEditing.applyChanges()) {
// Изменений не было
this.onDocumentContentReady();
}
// Пересылаем свои изменения (просто стираем чужие lock-и, т.к. своих изменений нет)
this.collaborativeEditing.sendChanges();
};
// GoTo
spreadsheet_api.prototype._goToComment = function(data) {
var comment = this.wbModel.getComment(data);
if (comment) {
this.asc_showWorksheet(this.wbModel.getWorksheetById(comment.wsId).getIndex());
this.asc_selectComment(comment.nId);
this.asc_showComment(comment.nId);
}
};
spreadsheet_api.prototype._goToBookmark = function(data) {
// Disable edit because if there is no name, we will try to create it
var tmpRestrictions = this.restrictions;
this.restrictions = Asc.c_oAscRestrictionType.View;
// Set A1-mode because all bookmarks in A1-mode
var tmpR1C1 = AscCommonExcel.g_R1C1Mode;
AscCommonExcel.g_R1C1Mode = false;
this.asc_findCell(data);
// Restore variables
this.restrictions = tmpRestrictions;
AscCommonExcel.g_R1C1Mode = tmpR1C1;
};
/////////////////////////////////////////////////////////////////////////
///////////////////CoAuthoring and Chat api//////////////////////////////
/////////////////////////////////////////////////////////////////////////
spreadsheet_api.prototype._coAuthoringInitCollaborativeEditing = function(opt_handlers) {
var t = this;
opt_handlers = opt_handlers || {
"askLock": function() {
t.CoAuthoringApi.askLock.apply(t.CoAuthoringApi, arguments);
},
"releaseLocks": function() {
t.CoAuthoringApi.releaseLocks.apply(t.CoAuthoringApi, arguments);
},
"sendChanges": function() {
t._onSaveChanges.apply(t, arguments);
},
"applyChanges": function() {
t._onApplyChanges.apply(t, arguments);
},
"updateAfterApplyChanges": function() {
t._onUpdateAfterApplyChanges.apply(t, arguments);
},
"drawSelection": function() {
t._onDrawSelection.apply(t, arguments);
},
"drawFrozenPaneLines": function() {
t._onDrawFrozenPaneLines.apply(t, arguments);
},
"updateAllSheetsLock": function() {
t._onUpdateAllSheetsLock.apply(t, arguments);
},
"showDrawingObjects": function() {
t._onShowDrawingObjects.apply(t, arguments);
},
"showComments": function() {
t._onShowComments.apply(t, arguments);
},
"cleanSelection": function() {
t._onCleanSelection.apply(t, arguments);
},
"updateDocumentCanSave": function() {
t._onUpdateDocumentCanSave();
},
"checkCommentRemoveLock": function(lockElem) {
return t._onCheckCommentRemoveLock(lockElem);
},
"unlockDefName": function() {
t._onUnlockDefName.apply(t, arguments);
},
"checkDefNameLock": function(lockElem) {
return t._onCheckDefNameLock(lockElem);
},
"updateAllLayoutsLock": function() {
t._onUpdateAllLayoutsLock.apply(t, arguments);
},
"updateAllHeaderFooterLock": function() {
t._onUpdateAllHeaderFooterLock.apply(t, arguments);
},
"updateAllPrintScaleLock": function() {
t._onUpdateAllPrintScaleLock.apply(t, arguments);
},
"updateAllSheetViewLock": function() {
if (t._onUpdateAllSheetViewLock) {
t._onUpdateAllSheetViewLock.apply(t, arguments);
}
},
"unlockCF": function() {
t._onUnlockCF.apply(t, arguments);
},
"checkCFRemoveLock": function(lockElem) {
return t._onCheckCFRemoveLock(lockElem);
},
"unlockProtectedRange": function() {
t._onUnlockProtectedRange.apply(t, arguments);
},
"checkProtectedRangeRemoveLock": function(lockElem) {
return t._onCheckProtectedRangeRemoveLock(lockElem);
},
"unlockUserProtectedRanges": function() {
t._onUnlockUserProtectedRanges.apply(t, arguments);
}
}
this.collaborativeEditing = this.CollaborativeEditing = new AscCommonExcel.CCollaborativeEditing(opt_handlers, this.getViewMode());
}
spreadsheet_api.prototype._coAuthoringInitEnd = function() {
var t = this;
this.CoAuthoringApi.onConnectionStateChanged = function(e) {
if (true === AscCommon.CollaborativeEditing.Is_Fast() && false === e['state']) {
t.wb.Remove_ForeignCursor(e['id']);
}
t.handlers.trigger("asc_onConnectionStateChanged", e);
};
this.CoAuthoringApi.onLocksAcquired = function(e) {
if (t._coAuthoringCheckEndOpenDocument(t.CoAuthoringApi.onLocksAcquired, e)) {
return;
}
if (2 != e["state"]) {
var elementValue = e["blockValue"];
var lockElem = t.collaborativeEditing.getLockByElem(elementValue, c_oAscLockTypes.kLockTypeOther);
if (null === lockElem) {
lockElem = new AscCommonExcel.CLock(elementValue);
t.collaborativeEditing.addUnlock(lockElem);
}
var drawing, lockType = lockElem.Element["type"];
var oldType = lockElem.getType();
if (c_oAscLockTypes.kLockTypeOther2 === oldType || c_oAscLockTypes.kLockTypeOther3 === oldType) {
lockElem.setType(c_oAscLockTypes.kLockTypeOther3, true);
} else {
lockElem.setType(c_oAscLockTypes.kLockTypeOther, true);
}
// Выставляем ID пользователя, залочившего данный элемент
lockElem.setUserId(e["user"]);
if (lockType === c_oAscLockTypeElem.Object) {
drawing = g_oTableId.Get_ById(lockElem.Element["rangeOrObjectId"]);
if (drawing) {
var bLocked, bLocked2;
bLocked = drawing.lockType !== c_oAscLockTypes.kLockTypeNone && drawing.lockType !== c_oAscLockTypes.kLockTypeMine;
drawing.lockType = lockElem.Type;
if(drawing instanceof AscCommon.CCore) {
bLocked2 = drawing.lockType !== c_oAscLockTypes.kLockTypeNone && drawing.lockType !== c_oAscLockTypes.kLockTypeMine;
if(bLocked2 !== bLocked) {
t.sendEvent("asc_onLockCore", bLocked2);
}
}
}
}
if (t.wb) {
// Шлем update для toolbar-а, т.к. когда select в lock ячейке нужно заблокировать toolbar
t.wb._onWSSelectionChanged(true);
// Шлем update для листов
t._onUpdateSheetsLock(lockElem);
t._onUpdateDefinedNames(lockElem);
//эвент о локе в меню вкладки layout(кроме print area)
t._onUpdateLayoutLock(lockElem);
//эвент о локе в меню опции print area во вкладке layout
t._onUpdatePrintAreaLock(lockElem);
//эвент о локе в меню опции headers/footers во вкладке layout
t._onUpdateHeaderFooterLock(lockElem);
//эвент о локе в меню опции scale во вкладке layout
t._onUpdatePrintScaleLock(lockElem);
//эвент о локе представлений
if (t._onUpdateNamedSheetViewLock) {
t._onUpdateNamedSheetViewLock(lockElem);
}
t._onUpdateCFLock(lockElem);
t._onUpdateProtectedRangesLock(lockElem);
t._onUpdateUserProtectedRange(lockElem);
var ws = t.wb.getWorksheet();
var lockSheetId = lockElem.Element["sheetId"];
if (lockSheetId === ws.model.getId()) {
if (lockType === c_oAscLockTypeElem.Object) {
// Нужно ли обновлять закрепление областей
if (t._onUpdateFrozenPane(lockElem)) {
ws.draw();
} else if (drawing && ws.model === drawing.worksheet) {
if (ws.objectRender) {
ws.objectRender.showDrawingObjects();
}
}
} else if (lockType === c_oAscLockTypeElem.Range || lockType === c_oAscLockTypeElem.Sheet) {
ws.updateSelection();
}
} else if (-1 !== lockSheetId && 0 === lockSheetId.indexOf(AscCommonExcel.CCellCommentator.sStartCommentId)) {
// Коммментарий
t.handlers.trigger("asc_onLockComment", lockElem.Element["rangeOrObjectId"], e["user"]);
}
}
}
};
this.CoAuthoringApi.onLocksReleased = function(e, bChanges) {
if (t._coAuthoringCheckEndOpenDocument(t.CoAuthoringApi.onLocksReleased, e, bChanges)) {
return;
}
var element = e["block"];
var lockElem = t.collaborativeEditing.getLockByElem(element, c_oAscLockTypes.kLockTypeOther);
if (null != lockElem) {
var curType = lockElem.getType();
var newType = c_oAscLockTypes.kLockTypeNone;
if (curType === c_oAscLockTypes.kLockTypeOther) {
if (true != bChanges) {
newType = c_oAscLockTypes.kLockTypeNone;
} else {
newType = c_oAscLockTypes.kLockTypeOther2;
}
} else if (curType === c_oAscLockTypes.kLockTypeMine) {
// Такого быть не должно
newType = c_oAscLockTypes.kLockTypeMine;
} else if (curType === c_oAscLockTypes.kLockTypeOther2 || curType === c_oAscLockTypes.kLockTypeOther3) {
newType = c_oAscLockTypes.kLockTypeOther2;
}
if (t.wb) {
t.wb.getWorksheet().cleanSelection();
}
var drawing;
if (c_oAscLockTypes.kLockTypeNone !== newType) {
lockElem.setType(newType, true);
} else {
// Удаляем из lock-ов, тот, кто правил ушел и не сохранил
t.collaborativeEditing.removeUnlock(lockElem);
if (!t._onCheckCommentRemoveLock(lockElem.Element)) {
if (lockElem.Element["type"] === c_oAscLockTypeElem.Object) {
drawing = g_oTableId.Get_ById(lockElem.Element["rangeOrObjectId"]);
if (drawing) {
var bLocked = drawing.lockType !== c_oAscLockTypes.kLockTypeNone && drawing.lockType !== c_oAscLockTypes.kLockTypeMine;
drawing.lockType = c_oAscLockTypes.kLockTypeNone;
if(drawing instanceof AscCommon.CCore) {
if(bLocked){
t.sendEvent("asc_onLockCore", false);
}
}
}
}
}
}
if (t.wb) {
// Шлем update для листов
t._onUpdateSheetsLock(lockElem);
/*снимаем лок для DefName*/
t.handlers.trigger("asc_onLockDefNameManager",Asc.c_oAscDefinedNameReason.OK);
//эвент о локе в меню вкладки layout
t._onUpdateLayoutLock(lockElem);
//эвент о локе в меню опции print area во вкладке layout
t._onUpdatePrintAreaLock(lockElem);
//эвент о локе в меню опции headers/footers во вкладке layout
t._onUpdateHeaderFooterLock(lockElem);
//эвент о локе в меню опции scale во вкладке layout
t._onUpdatePrintScaleLock(lockElem);
/*снимаем лок c защищенных юзером диапазонов*/
t.handlers.trigger("asc_onLockUserProtectedManager");
}
}
};
this.CoAuthoringApi.onLocksReleasedEnd = function() {
if (!t.isDocumentLoadComplete) {
// Пока документ еще не загружен ничего не делаем
return;
}
if (t.wb) {
// Шлем update для toolbar-а, т.к. когда select в lock ячейке нужно сбросить блокировку toolbar
t.wb._onWSSelectionChanged(true);
var worksheet = t.wb.getWorksheet();
worksheet.cleanSelection();
worksheet._drawSelection();
worksheet._drawFrozenPaneLines();
if (worksheet.objectRender) {
worksheet.objectRender.showDrawingObjects();
}
}
};
this.CoAuthoringApi.onSaveChanges = function(e, userId, bFirstLoad) {
t.collaborativeEditing.addChanges(e);
if (!bFirstLoad && t.isDocumentLoadComplete) {
t.syncCollaborativeChanges();
}
};
this.CoAuthoringApi.onChangesIndex = function(changesIndex)
{
if (t.isLiveViewer() && changesIndex >= 0 && changesIndex < AscCommon.CollaborativeEditing.GetAllChangesCount()) {
//перестаем быть LiveViewer из-за бага, что мы не может делать undo действиям которые пришли в изменениях (нет oldValue)
t.asc_SetFastCollaborative(false);
// let count = AscCommon.CollaborativeEditing.GetAllChangesCount() - changesIndex;
// AscCommon.CollaborativeEditing.UndoGlobal(count);
}
};
this.CoAuthoringApi.onRecalcLocks = function(excelAdditionalInfo) {
if (!excelAdditionalInfo) {
return;
}
var tmpAdditionalInfo = JSON.parse(excelAdditionalInfo);
// Это мы получили recalcIndexColumns и recalcIndexRows
var oRecalcIndexColumns = t.collaborativeEditing.addRecalcIndex('0', tmpAdditionalInfo['indexCols']);
var oRecalcIndexRows = t.collaborativeEditing.addRecalcIndex('1', tmpAdditionalInfo['indexRows']);
// Теперь нужно пересчитать индексы для lock-элементов
if (null !== oRecalcIndexColumns || null !== oRecalcIndexRows) {
t.collaborativeEditing._recalcLockArray(c_oAscLockTypes.kLockTypeMine, oRecalcIndexColumns, oRecalcIndexRows);
t.collaborativeEditing._recalcLockArray(c_oAscLockTypes.kLockTypeOther, oRecalcIndexColumns, oRecalcIndexRows);
}
if (true === AscCommon.CollaborativeEditing.Is_Fast()) {
AscCommon.CollaborativeEditing.UpdateForeignCursorByAdditionalInfo(tmpAdditionalInfo);
}
};
this.CoAuthoringApi.onCursor = function(e) {
if (AscCommon.CollaborativeEditing && true === AscCommon.CollaborativeEditing.Is_Fast() && e && e[e.length - 1]) {
t.wb.Update_ForeignCursor(e[e.length - 1]['cursor'], e[e.length - 1]['user'], true, e[e.length - 1]['useridoriginal']);
}
};
};
spreadsheet_api.prototype._onSaveChanges = function(recalcIndexColumns, recalcIndexRows, isAfterAskSave, arrChanges) {
if (this.isDocumentLoadComplete) {
let arrChangesaSerializable = null;
let deleteIndex = null;
if (arrChanges) {
deleteIndex = null;
} else {
let ser = this.wbModel.SerializeHistory();
arrChanges = ser[0];
arrChangesaSerializable = ser[1];
deleteIndex = History.GetDeleteIndex();
}
var excelAdditionalInfo = null;
var bCollaborative = this.collaborativeEditing.getCollaborativeEditing();
if (bCollaborative) {
// Пересчетные индексы добавляем только если мы не одни
if (recalcIndexColumns || recalcIndexRows) {
excelAdditionalInfo = {"indexCols": recalcIndexColumns, "indexRows": recalcIndexRows};
}
}
if (0 < arrChanges.length || null !== deleteIndex || null !== excelAdditionalInfo) {
var oWs = this.wb.getWorksheet();
var sCursorBinary = "";
if (oWs && oWs.objectRender) {
sCursorBinary = oWs.objectRender.getDocumentPositionBinary();
}
if(typeof sCursorBinary === "string" && sCursorBinary.length > 0) {
if(!AscCommon.isRealObject(excelAdditionalInfo)) {
excelAdditionalInfo = {};
}
excelAdditionalInfo["UserId"] = this.CoAuthoringApi.getUserConnectionId();
excelAdditionalInfo["UserShortId"] = this.DocInfo.get_UserId();
excelAdditionalInfo["CursorInfo"] = this.wb.getCursorInfo();
}
if (arrChangesaSerializable) {
this.collaborativeEditing.CoHistory.AddOwnChanges(arrChangesaSerializable, deleteIndex);
}
this.CoAuthoringApi.saveChanges(arrChanges, deleteIndex, excelAdditionalInfo, this.canUnlockDocument2, bCollaborative);
History.CanNotAddChanges = true;
} else {
this.CoAuthoringApi.unLockDocument(!!isAfterAskSave, this.canUnlockDocument2, null, bCollaborative);
}
this.canUnlockDocument2 = false;
}
};
spreadsheet_api.prototype._onApplyChanges = function(changes, fCallback, oColor) {
let t = this;
let perfStart = performance.now();
let callback = fCallback;
if (!this.isDocumentLoadComplete) {
callback = function() {
let perfEnd = performance.now();
AscCommon.sendClientLog("debug", AscCommon.getClientInfoString("onApplyChanges", perfEnd - perfStart), t);
fCallback();
};
}
this.inkDrawer.startSilentMode();
this.wbModel.DeserializeHistory(changes, callback, oColor);
this.inkDrawer.endSilentMode();
};
spreadsheet_api.prototype._onUpdateAfterApplyChanges = function() {
if (!this.isDocumentLoadComplete) {
// При открытии после принятия изменений мы должны сбросить пересчетные индексы
this.collaborativeEditing.clearRecalcIndex();
this.onDocumentContentReady();
} else if (this.wb && !window["NATIVE_EDITOR_ENJINE"]) {
// Нужно послать 'обновить свойства' (иначе для удаления данных не обновится строка формул).
// ToDo Возможно стоит обновлять только строку формул
AscCommon.CollaborativeEditing.Load_Images();
if(AscCommon.CollaborativeEditing.Is_Fast()) {
AscCommon.CollaborativeEditing.Refresh_ForeignCursors();
}
this.wb._onWSSelectionChanged();
History.TurnOff();
this.wb.drawWorksheet();
History.TurnOn();
}
if (this.isApplyChangesOnVersionHistory)
{
this.isApplyChangesOnVersionHistory = false;
this._openVersionHistoryEndCallback();
}
};
spreadsheet_api.prototype.onDocumentContentReady = function() {
AscCommon.baseEditorsApi.prototype.onDocumentContentReady.call(this);
if (window["AscDesktopEditor"] && window["AscDesktopEditor"]["onFileLockedClose"]) {
this.asc_registerCallback("onOpenCellEditor", function() {
window["AscDesktopEditor"]["onFileLockedClose"](true);
});
this.asc_registerCallback("onCloseCellEditor", function() {
window["AscDesktopEditor"]["onFileLockedClose"](false);
});
}
};
spreadsheet_api.prototype._onCleanSelection = function() {
if (this.wb) {
this.wb.getWorksheet().cleanSelection();
}
};
spreadsheet_api.prototype._onDrawSelection = function() {
if (this.wb) {
this.wb.getWorksheet()._drawSelection();
}
};
spreadsheet_api.prototype._onDrawFrozenPaneLines = function() {
if (this.wb) {
this.wb.getWorksheet()._drawFrozenPaneLines();
}
};
spreadsheet_api.prototype._onUpdateAllSheetsLock = function () {
if (this.wbModel) {
// Шлем update для листов
this.handlers.trigger("asc_onWorkbookLocked", this.asc_isWorkbookLocked());
var i, length, wsModel, wsIndex;
for (i = 0, length = this.wbModel.getWorksheetCount(); i < length; ++i) {
wsModel = this.wbModel.getWorksheet(i);
wsIndex = wsModel.getIndex();
this.handlers.trigger("asc_onWorksheetLocked", wsIndex, this.asc_isWorksheetLockedOrDeleted(wsIndex));
}
}
};
spreadsheet_api.prototype._onUpdateAllLayoutsLock = function () {
var t = this;
if (t.wbModel) {
var i, length, wsModel, wsIndex;
for (i = 0, length = t.wbModel.getWorksheetCount(); i < length; ++i) {
wsModel = t.wbModel.getWorksheet(i);
wsIndex = wsModel.getIndex();
var isLocked = t.asc_isLayoutLocked(wsIndex);
if (isLocked) {
t.handlers.trigger("asc_onLockDocumentProps", wsIndex);
} else {
t.handlers.trigger("asc_onUnLockDocumentProps", wsIndex);
}
}
}
};
spreadsheet_api.prototype._onUpdateAllHeaderFooterLock = function () {
var t = this;
if (t.wbModel) {
var i, length, wsModel, wsIndex;
for (i = 0, length = t.wbModel.getWorksheetCount(); i < length; ++i) {
wsModel = t.wbModel.getWorksheet(i);
wsIndex = wsModel.getIndex();
var isLocked = t.asc_isLayoutLocked(wsIndex);
if (isLocked) {
t.handlers.trigger("asc_onLockHeaderFooter", wsIndex);
} else {
t.handlers.trigger("asc_onUnLockHeaderFooter", wsIndex);
}
}
}
};
spreadsheet_api.prototype._onUpdateAllPrintScaleLock = function () {
var t = this;
if (t.wbModel) {
var i, length, wsModel, wsIndex;
for (i = 0, length = t.wbModel.getWorksheetCount(); i < length; ++i) {
wsModel = t.wbModel.getWorksheet(i);
wsIndex = wsModel.getIndex();
var isLocked = t.asc_isLayoutLocked(wsIndex);
if (isLocked) {
t.handlers.trigger("asc_onLockPrintScale", wsIndex);
} else {
t.handlers.trigger("asc_onUnLockPrintScale", wsIndex);
}
}
}
};
spreadsheet_api.prototype._onUpdateLayoutMenu = function (nSheetId) {
var t = this;
if (t.wbModel) {
var wsModel = t.wbModel.getWorksheetById(nSheetId);
if (wsModel) {
var wsIndex = wsModel.getIndex();
t.handlers.trigger("asc_onUpdateDocumentProps", wsIndex);
}
}
};
spreadsheet_api.prototype._onShowDrawingObjects = function() {
if (this.wb) {
var ws = this.wb.getWorksheet();
if (ws && ws.objectRender) {
ws.objectRender.showDrawingObjects();
}
}
};
spreadsheet_api.prototype._onShowComments = function() {
if (this.wb) {
this.wb.getWorksheet().cellCommentator.drawCommentCells();
}
};
spreadsheet_api.prototype._onUpdateSheetsLock = function (lockElem) {
// Шлем update для листов, т.к. нужно залочить лист
if (c_oAscLockTypeElem.Sheet === lockElem.Element["type"]) {
this._onUpdateAllSheetsLock();
} else {
// Шлем update для листа
var wsModel = this.wbModel.getWorksheetById(lockElem.Element["sheetId"]);
if (wsModel) {
var wsIndex = wsModel.getIndex();
this.handlers.trigger("asc_onWorksheetLocked", wsIndex, this.asc_isWorksheetLockedOrDeleted(wsIndex));
}
}
};
spreadsheet_api.prototype._onUpdateLayoutLock = function(lockElem) {
var t = this;
var wsModel = t.wbModel.getWorksheetById(lockElem.Element["sheetId"]);
if (wsModel) {
var wsIndex = wsModel.getIndex();
var isLocked = t.asc_isLayoutLocked(wsIndex);
if(isLocked) {
t.handlers.trigger("asc_onLockDocumentProps", wsIndex);
} else {
t.handlers.trigger("asc_onUnLockDocumentProps", wsIndex);
}
}
};
spreadsheet_api.prototype._onUpdatePrintAreaLock = function(lockElem) {
var t = this;
var wsModel = t.wbModel.getWorksheetById(lockElem.Element["sheetId"]);
var wsIndex = wsModel? wsModel.getIndex() : undefined;
var isLocked = t.asc_isPrintAreaLocked(wsIndex);
if(isLocked) {
t.handlers.trigger("asc_onLockPrintArea");
} else {
t.handlers.trigger("asc_onUnLockPrintArea");
}
};
spreadsheet_api.prototype._onUpdateHeaderFooterLock = function(lockElem) {
var t = this;
var wsModel = t.wbModel.getWorksheetById(lockElem.Element["sheetId"]);
if (wsModel) {
var wsIndex = wsModel.getIndex();
var isLocked = t.asc_isHeaderFooterLocked();
if(isLocked) {
t.handlers.trigger("asc_onLockHeaderFooter");
} else {
t.handlers.trigger("asc_onUnLockHeaderFooter");
}
}
};
spreadsheet_api.prototype._onUpdatePrintScaleLock = function(lockElem) {
var t = this;
var wsModel = t.wbModel.getWorksheetById(lockElem.Element["sheetId"]);
if (wsModel) {
var wsIndex = wsModel.getIndex();
var isLocked = t.asc_isPrintScaleLocked();
if(isLocked) {
t.handlers.trigger("asc_onLockPrintScale");
} else {
t.handlers.trigger("asc_onUnLockPrintScale");
}
}
};
spreadsheet_api.prototype._onUpdateFrozenPane = function(lockElem) {
return (c_oAscLockTypeElem.Object === lockElem.Element["type"] && lockElem.Element["rangeOrObjectId"] === AscCommonExcel.c_oAscLockNameFrozenPane);
};
spreadsheet_api.prototype._sendWorkbookStyles = function () {
// Для нативной версии (сборка и приложение) не генерируем стили
if (this.wbModel && !window["NATIVE_EDITOR_ENJINE"]) {
// Отправка стилей ячеек
this.handlers.trigger("asc_onInitEditorStyles", this.wb.getCellStyles(this.styleThumbnailWidth, this.styleThumbnailHeight));
}
};
spreadsheet_api.prototype.startCollaborationEditing = function() {
// Начинаем совместное редактирование
this.collaborativeEditing.startCollaborationEditing();
if (this.isDocumentLoadComplete) {
var worksheet = this.wb.getWorksheet();
worksheet.cleanSelection();
worksheet._drawSelection();
worksheet._drawFrozenPaneLines();
if (worksheet.objectRender) {
worksheet.objectRender.showDrawingObjects();
}
}
};
spreadsheet_api.prototype.endCollaborationEditing = function() {
// Временно заканчиваем совместное редактирование
this.collaborativeEditing.endCollaborationEditing();
};
// End Load document
spreadsheet_api.prototype._openDocumentEndCallback = function () {
// Не инициализируем дважды
if (this.isDocumentLoadComplete || !this.ServerIdWaitComplete || !this.FontLoadWaitComplete) {
return;
}
if (AscCommon.EncryptionWorker)
{
AscCommon.EncryptionWorker.init();
if (!AscCommon.EncryptionWorker.isChangesHandled)
return AscCommon.EncryptionWorker.handleChanges(this.collaborativeEditing.m_arrChanges, this, this._openDocumentEndCallback);
}
if (0 === this.wbModel.getWorksheetCount()) {
this.sendEvent("asc_onError", c_oAscError.ID.ConvertationOpenError, c_oAscError.Level.Critical);
return;
}
//история версий - возможно стоит грамотно чистить wbview, но не пересоздавать
var previousVersionZoom;
if ((this.VersionHistory || this.isEditOleMode) && this.controller) {
var elem = document.getElementById("ws-v-scrollbar");
if (elem) {
elem.parentNode.removeChild(elem);
}
elem = document.getElementById("ws-h-scrollbar");
if (elem) {
elem.parentNode.removeChild(elem);
}
this.controller.vsbApi = null;
this.controller.hsbApi = null;
previousVersionZoom = this.wb && this.wb.getZoom();
}
if (!this.IsInitControl) {
// todo Create HtmlPage like other editors
// add style
let _head = document.getElementsByTagName('head')[0];
let style0 = document.createElement('style');
style0.type = 'text/css';
style0.innerHTML = ".block_elem { position:absolute;padding:0;margin:0; }";
_head.appendChild(style0);
this.HtmlElement.innerHTML = '
';
this.IsInitControl = true;
}
this.wb = new AscCommonExcel.WorkbookView(this.wbModel, this.controller, this.handlers, this.HtmlElement,
this.topLineEditorElement, this, this.collaborativeEditing, this.fontRenderingMode);
this.registerCustomFunctionsLibrary();
if (this.isCopyOutEnabled && this.topLineEditorElement) {
if (this.isCopyOutEnabled() === false) {
this.topLineEditorElement.oncopy = function () {
return false;
};
this.topLineEditorElement.oncut = function () {
return false;
};
}
}
if (this.isUseOldMobileVersion()) {
this.wb.defaults.worksheetView.halfSelection = true;
this.wb.defaults.worksheetView.activeCellBorderColor = new CColor(79, 158, 79);
var _container = document.getElementById(this.HtmlElementName);
if (_container) {
_container.style.overflow = "hidden";
}
// input context must be created!!!
var _areaId = AscCommon.g_inputContext.HtmlArea.id;
var _element = document.getElementById(_areaId);
_element.parentNode.parentNode.style.zIndex = 10;
}
if ((typeof AscCommonExcel.CMobileTouchManager) !== "undefined")
{
this.wb.MobileTouchManager = new AscCommonExcel.CMobileTouchManager({eventsElement: "cell_mobile_element", desktopMode : !this.isUseOldMobileVersion()});
this.wb.MobileTouchManager.Init(this);
if (this.isUseOldMobileVersion())
this.wb.MobileTouchManager.initEvents(AscCommon.g_inputContext.HtmlArea.id);
if (this.controller)
this.wb.MobileTouchManager.addClickElement([this.controller.element]);
}
this.asc_CheckGuiControlColors();
this.sendColorThemes(this.wbModel.theme);
this.asc_ApplyColorScheme(false);
this.sendStandartTextures();
this.sendMathToMenu();
this._applyPreOpenLocks();
// Применяем пришедшие при открытии изменения
this._applyFirstLoadChanges();
// Go to if sent options
this.goTo();
// Меняем тип состояния (на никакое)
this.advancedOptionsAction = c_oAscAdvancedOptionsAction.None;
// Были ошибки при открытии, посылаем предупреждение
if (0 < this.wbModel.openErrors.length) {
this.sendEvent('asc_onError', c_oAscError.ID.OpenWarning, c_oAscError.Level.NoCritical);
}
if (this.VersionHistory || this.isEditOleMode) {
if (this.VersionHistory && this.VersionHistory.changes) {
this.VersionHistory.applyChanges(this);
}
this.sheetsChanged();
if (previousVersionZoom) {
this.asc_setZoom(previousVersionZoom);
}
}
if (this.canEdit() && this.asc_getExternalReferences()) {
this.handlers.trigger("asc_onNeedUpdateExternalReferenceOnOpen");
}
this.onUpdateDocumentModified(this.isDocumentModified());//line moved from onDocumentContentReady
//раньше вызов был закомментирован, потому при при открытии вызывается в Viewport.js(asc_Resize) и Main.js(asc_showComments)
//но рассчитывать на внешние вызовы ненадежно и вызовов нет при VersionHistory и refreshFile
this.asc_Resize();
this.initBroadcastChannel();
this.initBroadcastChannelListeners();
};
// Переход на диапазон в листе
spreadsheet_api.prototype._asc_setWorksheetRange = function (val) {
// Получаем sheet по имени
var ranges = null, ws;
var sheet = val.asc_getSheet();
if (!sheet) {
ranges = AscCommonExcel.getRangeByRef(val.asc_getLocation(), this.wbModel.getActiveWs(), true);
if (ranges = ranges[0]) {
ws = ranges.worksheet;
}
} else {
//при переходе к диапазону внутри документа, игнорируется регистр у имени листа -> Sheet1===SHEEt1
ws = this.wbModel.getWorksheetByName(sheet, true);
}
if (!ws) {
this.handlers.trigger("asc_onHyperlinkClick", null);
return;
} else if (ws.getHidden()) {
return;
}
// Индекс листа
var sheetIndex = ws.getIndex();
// Если не совпали индекс листа и индекс текущего, то нужно сменить
if (this.asc_getActiveWorksheetIndex() !== sheetIndex) {
// Меняем активный лист
this.asc_showWorksheet(sheetIndex);
}
var range;
if (ranges) {
range = ranges.bbox;
} else {
range = ws.getRange2(val.asc_getRange());
if (range) {
range = range.getBBox0();
}
}
this.wb._onSetSelection(range, /*validRange*/ true);
};
spreadsheet_api.prototype.asc_setWorksheetRange = function (val) {
this._asc_setWorksheetRange(val);
};
spreadsheet_api.prototype._onSaveCallbackInner = function () {
var t = this;
AscCommon.CollaborativeEditing.Clear_CollaborativeMarks();
// Принимаем чужие изменения
this.collaborativeEditing.applyChanges();
this.CoAuthoringApi.onUnSaveLock = function () {
t.CoAuthoringApi.onUnSaveLock = null;
if (t.isForceSaveOnUserSave && t.IsUserSave) {
t.forceSaveButtonContinue = t.forceSave();
}
if (t.forceSaveForm) {
t.forceSaveForm();
}
if (t.collaborativeEditing.getCollaborativeEditing()) {
// Шлем update для toolbar-а, т.к. когда select в lock ячейке нужно заблокировать toolbar
t.wb._onWSSelectionChanged(true);
}
t.canSave = true;
t.IsUserSave = false;
t.lastSaveTime = null;
if (!t.forceSaveButtonContinue) {
t.sync_EndAction(c_oAscAsyncActionType.Information, c_oAscAsyncAction.Save);
}
// Обновляем состояние возможности сохранения документа
t.onUpdateDocumentModified(History.Have_Changes());
if (undefined !== window["AscDesktopEditor"]) {
window["AscDesktopEditor"]["OnSave"]();
}
if (t.canUnlockDocument) {
t._unlockDocument();
}
};
// Пересылаем свои изменения
if (this.forceSaveUndoRequest)
{
this.collaborativeEditing.Set_GlobalLock(false);
this.collaborativeEditing.Undo();
this.forceSaveUndoRequest = false;
}
else
{
this.collaborativeEditing.sendChanges(this.IsUserSave, true);
}
};
spreadsheet_api.prototype._isLockedSparkline = function (id, callback) {
var lockInfo = this.collaborativeEditing.getLockInfo(c_oAscLockTypeElem.Object, /*subType*/null,
this.asc_getActiveWorksheetId(), id);
this.collaborativeEditing.lock([lockInfo], callback);
};
spreadsheet_api.prototype._isLockedAddWorksheets = function(callback) {
// Проверка глобального лока
if (this.collaborativeEditing.getGlobalLock() || !this.canEdit()) {
return false;
}
var lockInfo = this.collaborativeEditing.getLockInfo(c_oAscLockTypeElem.Sheet, /*subType*/null,
AscCommonExcel.c_oAscLockAddSheet, AscCommonExcel.c_oAscLockAddSheet);
this.collaborativeEditing.lock([lockInfo], callback);
};
spreadsheet_api.prototype._addWorksheetsCheck = function(callback) {
let t = this;
if (this.asc_isProtectedWorkbook()) {
callback.call(t, false);
}
this._isLockedAddWorksheets(function (res) {
callback.call(t, res);
});
};
spreadsheet_api.prototype._addWorksheetsWithoutLock = function (arrNames, where) {
var res = [];
this.inkDrawer.startSilentMode();
History.Create_NewPoint();
History.StartTransaction();
for (var i = arrNames.length - 1; i >= 0; --i) {
res.push(this.wbModel.createWorksheet(where, arrNames[i]));
}
this.wbModel.setActive(where);
this.wb.updateWorksheetByModel();
if (this.wbModel.getDefaultDirection()) {
this.asc_setRightToLeft(true);
}
this.wb.showWorksheet();
this.wbModel.dependencyFormulas.lockRecal();
History.EndTransaction();
if (this.wbModel.dependencyFormulas.changedCell) {
this.wbModel.dependencyFormulas.changedCell = null;
}
this.wbModel.dependencyFormulas.unlockRecal();
// Посылаем callback об изменении списка листов
this.sheetsChanged();
this.inkDrawer.endSilentMode();
return res;
};
// Workbook interface
spreadsheet_api.prototype.asc_getWorksheetsCount = function() {
return this.wbModel.getWorksheetCount();
};
spreadsheet_api.prototype.asc_getWorksheetName = function(index) {
return this.wbModel.getWorksheet(index).getName();
};
spreadsheet_api.prototype.asc_getWorksheetTabColor = function(index) {
return this.wbModel.getWorksheet(index).getTabColor();
};
spreadsheet_api.prototype.asc_setWorksheetTabColor = function(color, arrSheets) {
// Проверка глобального лока
if (this.collaborativeEditing.getGlobalLock() || !this.canEdit()) {
return false;
}
if (this.asc_isProtectedWorkbook()) {
return false;
}
if (!arrSheets) {
arrSheets = [this.wbModel.getActive()];
}
var sheet, arrLocks = [];
for (var i = 0; i < arrSheets.length; ++i) {
sheet = this.wbModel.getWorksheet(arrSheets[i]);
arrLocks.push(this.collaborativeEditing.getLockInfo(c_oAscLockTypeElem.Object, /*subType*/null, sheet.getId(), AscCommonExcel.c_oAscLockNameTabColor));
}
var t = this;
var changeTabColorCallback = function(res) {
if (res) {
color = AscCommonExcel.CorrectAscColor(color);
History.Create_NewPoint();
History.StartTransaction();
for (var i = 0; i < arrSheets.length; ++i) {
t.wbModel.getWorksheet(arrSheets[i]).setTabColor(color);
}
History.EndTransaction();
}
};
this.collaborativeEditing.lock(arrLocks, changeTabColorCallback);
};
spreadsheet_api.prototype.asc_getActiveWorksheetIndex = function() {
return this.wbModel.getActive();
};
spreadsheet_api.prototype.asc_getActiveWorksheetId = function() {
var activeIndex = this.wbModel.getActive();
return this.wbModel.getWorksheet(activeIndex).getId();
};
spreadsheet_api.prototype.asc_getWorksheetId = function(index) {
return this.wbModel.getWorksheet(index).getId();
};
spreadsheet_api.prototype.asc_isWorksheetHidden = function(index) {
return this.wbModel.getWorksheet(index).getHidden();
};
spreadsheet_api.prototype.asc_getDefinedNames = function(defNameListId, excludeErrorRefNames) {
return this.wb.getDefinedNames(defNameListId,excludeErrorRefNames);
};
spreadsheet_api.prototype.asc_setDefinedNames = function(defName) {
// return this.wb.setDefinedNames(defName);
// Проверка глобального лока
if (this.collaborativeEditing.getGlobalLock() || !this.canEdit()) {
return;
}
return this.wb.editDefinedNames(null, defName);
};
spreadsheet_api.prototype.asc_editDefinedNames = function(oldName, newName) {
// Проверка глобального лока
if (this.collaborativeEditing.getGlobalLock() || !this.canEdit()) {
return;
}
return this.wb.editDefinedNames(oldName, newName);
};
spreadsheet_api.prototype.asc_delDefinedNames = function(oldName) {
// Проверка глобального лока
if (this.collaborativeEditing.getGlobalLock() || !this.canEdit()) {
return;
}
return this.wb.delDefinedNames(oldName);
};
spreadsheet_api.prototype.asc_checkDefinedName = function(checkName, scope) {
return this.wbModel.checkDefName(checkName, scope);
};
spreadsheet_api.prototype.asc_getDefaultDefinedName = function() {
return this.wb.getDefaultDefinedName();
};
spreadsheet_api.prototype.asc_getDefaultTableStyle = function() {
return this.wb.getDefaultTableStyle();
};
spreadsheet_api.prototype._onUpdateDefinedNames = function(lockElem) {
// if( lockElem.Element["subType"] == AscCommonExcel.c_oAscLockTypeElemSubType.DefinedNames ){
if( lockElem.Element["sheetId"] == -1 && lockElem.Element["rangeOrObjectId"] != -1 && !this.collaborativeEditing.getFast() ){
var dN = this.wbModel.dependencyFormulas.getDefNameByNodeId(lockElem.Element["rangeOrObjectId"]);
if (dN) {
dN.isLock = lockElem.UserId;
this.handlers.trigger("asc_onRefreshDefNameList",dN.getAscCDefName());
}
this.handlers.trigger("asc_onLockDefNameManager",Asc.c_oAscDefinedNameReason.LockDefNameManager);
}
};
spreadsheet_api.prototype._onUnlockDefName = function() {
this.wb.unlockDefName();
};
spreadsheet_api.prototype._onCheckDefNameLock = function() {
return this.wb._onCheckDefNameLock();
};
// Залочена ли работа с листом
spreadsheet_api.prototype.asc_isWorksheetLockedOrDeleted = function(index) {
var ws = this.wbModel.getWorksheet(index);
var sheetId = null;
if (null === ws || undefined === ws) {
sheetId = this.asc_getActiveWorksheetId();
} else {
sheetId = ws.getId();
}
var lockInfo = this.collaborativeEditing.getLockInfo(c_oAscLockTypeElem.Sheet, /*subType*/null, sheetId, sheetId);
// Проверим, редактирует ли кто-то лист
return (false !== this.collaborativeEditing.getLockIntersection(lockInfo, c_oAscLockTypes.kLockTypeOther, /*bCheckOnlyLockAll*/false));
};
// Залочена ли работа с листами
spreadsheet_api.prototype.asc_isWorkbookLocked = function() {
var lockInfo = this.collaborativeEditing.getLockInfo(c_oAscLockTypeElem.Sheet, /*subType*/null, null, null);
// Проверим, редактирует ли кто-то лист
return (false !== this.collaborativeEditing.getLockIntersection(lockInfo, c_oAscLockTypes.kLockTypeOther, /*bCheckOnlyLockAll*/false));
};
// Залочена ли работа с листом
spreadsheet_api.prototype.asc_isLayoutLocked = function(index) {
var ws = this.wbModel.getWorksheet(index);
var sheetId = null;
if (null === ws || undefined === ws) {
sheetId = this.asc_getActiveWorksheetId();
} else {
sheetId = ws.getId();
}
var lockInfo = this.collaborativeEditing.getLockInfo(c_oAscLockTypeElem.Object, /*subType*/null, sheetId, "layoutOptions");
// Проверим, редактирует ли кто-то лист
return (false !== this.collaborativeEditing.getLockIntersection(lockInfo, c_oAscLockTypes.kLockTypeOther, /*bCheckOnlyLockAll*/false));
};
// Залочена ли работа с листом
spreadsheet_api.prototype.asc_isHeaderFooterLocked = function(index) {
var ws = this.wbModel.getWorksheet(index);
var sheetId = null;
if (null === ws || undefined === ws) {
sheetId = this.asc_getActiveWorksheetId();
} else {
sheetId = ws.getId();
}
var lockInfo = this.collaborativeEditing.getLockInfo(c_oAscLockTypeElem.Object, /*subType*/null, sheetId, "headerFooter");
// Проверим, редактирует ли кто-то лист
return (false !== this.collaborativeEditing.getLockIntersection(lockInfo, c_oAscLockTypes.kLockTypeOther, /*bCheckOnlyLockAll*/false));
};
spreadsheet_api.prototype.asc_isPrintScaleLocked = function(index) {
var ws = this.wbModel.getWorksheet(index);
var sheetId = null;
if (null === ws || undefined === ws) {
sheetId = this.asc_getActiveWorksheetId();
} else {
sheetId = ws.getId();
}
var lockInfo = this.collaborativeEditing.getLockInfo(c_oAscLockTypeElem.Object, /*subType*/null, sheetId, "printScaleOptions");
return (false !== this.collaborativeEditing.getLockIntersection(lockInfo, c_oAscLockTypes.kLockTypeOther, /*bCheckOnlyLockAll*/false));
};
spreadsheet_api.prototype.asc_isPrintAreaLocked = function(index) {
//проверка лока для именованного диапазона - области печати
//локи для именованных диапазонов устроены следующем образом: если изменяется хоть один именованный диапазон
//добавлять новые/редактировать старые/удалять измененные нельзя, но зато разрешается удалять не измененные
//в данном случае для области печати логика следующая - если был добавлен именованный диапазон(в тч и область печати)
//не даём возможность добавлять/редактировть область печати на всех листах, но разрешаем удалять не измененные области печати
//если вторым пользователем добавлена область печати, первым удалять разершается по общей схеме
//но поскольку изменения не приняты, этой области печати ещё нет у первого пользователя - удаления не произойдёт
var res = false;
if(index !== undefined) {
var sheetId = this.wbModel.getWorksheet(index).getId();
var dN = this.wbModel.dependencyFormulas.getDefNameByName("Print_Area", sheetId);
if(dN) {
res = !!dN.isLock;
}
}
return res;
};
spreadsheet_api.prototype.asc_getHiddenWorksheets = function() {
var model = this.wbModel;
var len = model.getWorksheetCount();
var i, ws, res = [];
for (i = 0; i < len; ++i) {
ws = model.getWorksheet(i);
if (ws.getHidden()) {
res.push({"index": i, "name": ws.getName()});
}
}
return res;
};
spreadsheet_api.prototype.asc_showWorksheet = function(index) {
if (typeof index === "number") {
var t = this;
var ws = this.wbModel.getWorksheet(index);
var isHidden = ws.getHidden();
var showWorksheetCallback = function(res) {
if (res) {
t.wbModel.getWorksheet(index).setHidden(false);
t.wb.showWorksheet(index);
}
};
if (isHidden) {
if (this.asc_isProtectedWorkbook()) {
return false;
}
var sheetId = this.wbModel.getWorksheet(index).getId();
var lockInfo = this.collaborativeEditing.getLockInfo(c_oAscLockTypeElem.Sheet, /*subType*/null, sheetId, sheetId);
this.collaborativeEditing.lock([lockInfo], showWorksheetCallback);
} else {
showWorksheetCallback(true);
}
}
};
spreadsheet_api.prototype.asc_hideWorksheet = function (arrSheets) {
// Проверка глобального лока
if (this.collaborativeEditing.getGlobalLock() || !this.canEdit()) {
return false;
}
if (this.asc_isProtectedWorkbook()) {
return false;
}
if (!arrSheets) {
arrSheets = [this.wbModel.getActive()];
}
// Вдруг остался один лист
if (this.asc_getWorksheetsCount() <= this.asc_getHiddenWorksheets().length + arrSheets.length) {
return false;
}
var sheet, arrLocks = [];
for (var i = 0; i < arrSheets.length; ++i) {
sheet = this.wbModel.getWorksheet(arrSheets[i]);
arrLocks.push(this.collaborativeEditing.getLockInfo(c_oAscLockTypeElem.Sheet, /*subType*/null, sheet.getId(), sheet.getId()));
}
var t = this;
var hideWorksheetCallback = function(res) {
if (res) {
History.Create_NewPoint();
History.StartTransaction();
for (var i = 0; i < arrSheets.length; ++i) {
t.wbModel.getWorksheet(arrSheets[i]).setHidden(true);
}
History.EndTransaction();
}
};
this.collaborativeEditing.lock(arrLocks, hideWorksheetCallback);
return true;
};
spreadsheet_api.prototype.asc_renameWorksheet = function(name) {
// Проверка глобального лока
if (this.collaborativeEditing.getGlobalLock() || !this.canEdit()) {
return false;
}
if (this.asc_isProtectedWorkbook()) {
return false;
}
var i = this.wbModel.getActive();
var sheetId = this.wbModel.getWorksheet(i).getId();
var lockInfo = this.collaborativeEditing.getLockInfo(c_oAscLockTypeElem.Sheet, /*subType*/null, sheetId, sheetId);
var t = this;
var renameCallback = function(res) {
if (res) {
AscFonts.FontPickerByCharacter.getFontsByString(name);
t._loadFonts([], function() {
var oWorkbook = t.wbModel;
var oWorksheet = oWorkbook.getWorksheet(i);
var sOldName = oWorksheet.getName();
oWorksheet.setName(name);
t.sheetsChanged();
if(t.wb) {
//change sheet name in chart references
t.wb.handleChartsOnChangeSheetName(oWorksheet, sOldName, name);
}
});
} else {
t.handlers.trigger("asc_onError", c_oAscError.ID.LockedWorksheetRename, c_oAscError.Level.NoCritical);
}
};
this.collaborativeEditing.lock([lockInfo], renameCallback);
return true;
};
spreadsheet_api.prototype.asc_addWorksheet = function (name) {
var i = this.wbModel.getActive();
this._addWorksheetsCheck(function (res) {
if (res) {
this._addWorksheetsWithoutLock([name], i + 1);
}
});
};
spreadsheet_api.prototype.asc_insertWorksheet = function (arrNames) {
// Support old versions
if (!Array.isArray(arrNames)) {
arrNames = [arrNames];
}
var i = this.wbModel.getActive();
this._addWorksheetsCheck(function (res) {
if (res) {
this._addWorksheetsWithoutLock(arrNames, i);
}
});
};
// Удаление листа
spreadsheet_api.prototype.asc_deleteWorksheet = function (arrSheets) {
// Проверка глобального лока
if (this.collaborativeEditing.getGlobalLock() || !this.canEdit()) {
return false;
}
if (this.asc_isProtectedWorkbook()) {
return false;
}
if (!arrSheets) {
arrSheets = [this.wbModel.getActive()];
}
// Check delete all
if (this.wbModel.getWorksheetCount() === arrSheets.length) {
return false;
}
var sheet, arrLocks = [];
for (var i = 0; i < arrSheets.length; ++i) {
sheet = arrSheets[i] = this.wbModel.getWorksheet(arrSheets[i]);
arrLocks.push(this.collaborativeEditing.getLockInfo(c_oAscLockTypeElem.Sheet, /*subType*/null, sheet.getId(), sheet.getId()));
}
var t = this;
var deleteCallback = function(res) {
if (res) {
History.Create_NewPoint();
History.StartTransaction();
for (var i = 0; i < arrSheets.length; ++i) {
t.wbModel.removeWorksheet(arrSheets[i].getIndex());
}
t.wbModel.handleChartsOnWorksheetsRemove(arrSheets);
t.wb.updateWorksheetByModel();
History.EndTransaction();
t.wb.showWorksheet();
// Посылаем callback об изменении списка листов
t.sheetsChanged();
}
};
this.collaborativeEditing.lock(arrLocks, deleteCallback);
return true;
};
spreadsheet_api.prototype.asc_moveWorksheet = function (where, arrSheets, arrNames, arrBooks) {
if (arrBooks) {
if (arrBooks.length) {
this.sendSheetsToOtherBooks(where, arrNames, arrSheets, arrBooks);
this.asc_deleteWorksheet(arrSheets.slice());
} else if (window["AscDesktopEditor"] && window["AscDesktopEditor"]["IsLocalFile"]()) {
this.copyToNewWorkbook(arrSheets);
}
this.removeDocumentInfoEvent();
return;
}
// Проверка глобального лока
if (this.collaborativeEditing.getGlobalLock() || !this.canEdit()) {
return false;
}
if (this.asc_isProtectedWorkbook()) {
return false;
}
if (!arrSheets) {
arrSheets = [this.wbModel.getActive()];
}
var active, sheet, i, index, _where, arrLocks = [];
var arrSheetsLeft = [], arrSheetsRight = [];
for (i = 0; i < arrSheets.length; ++i) {
index = arrSheets[i];
sheet = this.wbModel.getWorksheet(index);
((index < where) ? arrSheetsLeft : arrSheetsRight).push(sheet);
if (!active) {
active = sheet;
}
arrLocks.push(this.collaborativeEditing.getLockInfo(c_oAscLockTypeElem.Sheet, /*subType*/null, sheet.getId(), sheet.getId()));
}
var t = this;
var moveCallback = function (res) {
if (res) {
History.Create_NewPoint();
History.StartTransaction();
for (i = 0, _where = where; i < arrSheetsRight.length; ++i, ++_where) {
index = arrSheetsRight[i].getIndex();
if (index !== _where) {
t.wbModel.replaceWorksheet(index, _where);
}
}
for (i = arrSheetsLeft.length - 1, _where = where - 1; i >= 0; --i, --_where) {
index = arrSheetsLeft[i].getIndex();
if (index !== _where) {
t.wbModel.replaceWorksheet(index, _where);
}
}
// Обновим текущий номер
t.wbModel.setActive(active.getIndex());
t.wb.updateWorksheetByModel();
t.wb.showWorksheet();
History.EndTransaction();
// Посылаем callback об изменении списка листов
t.sheetsChanged();
}
};
this.collaborativeEditing.lock(arrLocks, moveCallback);
return true;
};
spreadsheet_api.prototype.asc_copyWorksheet = function (where, arrNames, arrSheets, arrBooks) {
if (arrBooks) {
if (arrBooks.length) {
this.sendSheetsToOtherBooks(where, arrNames, arrSheets, arrBooks);
} else if (window["AscDesktopEditor"] && window["AscDesktopEditor"]["IsLocalFile"]()) {
this.copyToNewWorkbook(arrSheets);
}
this.removeDocumentInfoEvent();
return;
}
// Проверка глобального лока
if (this.collaborativeEditing.getGlobalLock() || !this.canEdit()) {
return false;
}
if (this.asc_isProtectedWorkbook()) {
return false;
}
// Support old versions
if (!Array.isArray(arrNames)) {
arrNames = [arrNames];
}
if (0 === arrNames.length) {
return false;
}
if (!arrSheets) {
arrSheets = [this.wbModel.getActive()];
}
var scale = this.asc_getZoom();
// ToDo уйти от lock для листа при копировании
var sheet, arrLocks = [];
for (var i = 0; i < arrSheets.length; ++i) {
sheet = arrSheets[i] = this.wbModel.getWorksheet(arrSheets[i]);
arrLocks.push(this.collaborativeEditing.getLockInfo(c_oAscLockTypeElem.Sheet, /*subType*/null, sheet.getId(), sheet.getId()));
}
var t = this;
var copyWorksheet = function(res) {
if (res) {
// ToDo перейти от wsViews на wsViewsId
History.Create_NewPoint();
History.StartTransaction();
var index;
for (var i = arrSheets.length - 1; i >= 0; --i) {
index = arrSheets[i].getIndex();
t.wbModel.copyWorksheet(index, where, arrNames[i]);
}
// Делаем активным скопированный
t.wbModel.setActive(where);
t.wb.updateWorksheetByModel();
t.wb.showWorksheet();
History.EndTransaction();
// Посылаем callback об изменении списка листов
t.sheetsChanged();
}
};
this.collaborativeEditing.lock(arrLocks, copyWorksheet);
};
spreadsheet_api.prototype.asc_cancelMoveCopyWorksheet = function () {
this.removeDocumentInfoEvent();
};
spreadsheet_api.prototype.copyToNewWorkbook = function (arrSheets) {
let aBinaryWorkbook = null;
let wb = this.wb;
let wbModel = this.wbModel;
wb.executeWithCurrentTopLeftCell(function () {
let mapSheets = {};
for (let i = 0; i < arrSheets.length; i++) {
mapSheets[arrSheets[i]] = 1;
}
let trueTabSelected = [];
wbModel.forEach(function (sheet, index) {
if (mapSheets[index]) {
for (let i in sheet.sheetViews) {
if (!trueTabSelected[index]) {
trueTabSelected[index] = [];
}
trueTabSelected[index][i] = sheet.sheetViews[i].tabSelected;
sheet.sheetViews[i].tabSelected = true;
}
}
})
let oBinaryFileWriter = new AscCommonExcel.BinaryFileWriter(wbModel);
oBinaryFileWriter.InitSaveManager.writeOnlySelectedTabs = true;
aBinaryWorkbook = oBinaryFileWriter.Write(true);
wbModel.forEach(function (sheet, index) {
if (mapSheets[index]) {
for (let i in sheet.sheetViews) {
sheet.sheetViews[i].tabSelected = trueTabSelected[index][i];
}
}
})
});
if (aBinaryWorkbook) {
window["AscDesktopEditor"]["OpenWorkbook"](AscCommon.Base64.encode(aBinaryWorkbook));
}
};
spreadsheet_api.prototype.removeDocumentInfoEvent = function () {
this.broadcastChannel && this.broadcastChannel.removeEventListener("message", window.fBroadcastChannelDocumentInfo);
window.fBroadcastChannelDocumentInfo = null;
};
spreadsheet_api.prototype.asc_StartMoveSheet = function (arrSheets) {
// Проверка глобального лока
// Лок каждого листа необходимо проверять в интерфейсе. если что-то залочено - не переносим
if (this.collaborativeEditing.getGlobalLock() || !this.canEdit()) {
return false;
}
if (this.asc_isProtectedWorkbook()) {
return false;
}
return this.getBinaryContentSheets(arrSheets);
};
spreadsheet_api.prototype.asc_EndMoveSheet = function(where, arrNames, arrSheets) {
// Проверка глобального лока
if (this.collaborativeEditing.getGlobalLock() || !this.canEdit()) {
return false;
}
if (this.asc_isProtectedWorkbook()) {
return false;
}
// Support old versions
if (!Array.isArray(arrNames)) {
arrNames = [arrNames];
}
if (0 === arrNames.length) {
return false;
}
if (!arrSheets) {
return false;
}
var t = this;
var addWorksheet = function(res) {
if (res) {
t.wb.pasteSheets(arrSheets, where, arrNames);
}
};
//TODO нужно лочить все листы
addWorksheet(true);
//this.collaborativeEditing.lock([], addWorksheet);
};
spreadsheet_api.prototype.getBinaryContentSheets = function (arrSheets) {
//если выделены все - не перенесим(проверка в интерфейсе)
var sheet, sBinarySheet, res = [];
var activeIndex = this.wbModel.nActive;
for (var i = 0; i < arrSheets.length; ++i) {
sheet = this.wbModel.getWorksheet(arrSheets[i]);
this.wbModel.nActive = sheet.getIndex();
sBinarySheet = AscCommonExcel.g_clipboardExcel.copyProcessor.getBinaryForCopy(sheet, null, null, true, true);
res.push(sBinarySheet);
}
this.wbModel.nActive = activeIndex;
return res;
};
spreadsheet_api.prototype.asc_cleanSelection = function() {
this.wb.getWorksheet().cleanSelection();
};
spreadsheet_api.prototype.asc_getZoom = function() {
return this.wb.getZoom();
};
spreadsheet_api.prototype.asc_setZoom = function(scale) {
this.wb && this.wb.changeZoom(scale);
};
spreadsheet_api.prototype.asc_enableKeyEvents = function(isEnabled, isFromInput) {
if (!this.isLoadFullApi) {
this.tmpFocus = isEnabled;
return;
}
if (this.wb) {
this.wb.enableKeyEventsHandler(isEnabled);
}
if (isFromInput !== true && AscCommon.g_inputContext)
AscCommon.g_inputContext.setInterfaceEnableKeyEvents(isEnabled);
};
spreadsheet_api.prototype.asc_IsFocus = function(bIsNaturalFocus) {
var res = true;
if(this.wb.cellEditor.isTopLineActive)
{
res = false;
}
else if (this.wb)
{
res = this.wb.getEnableKeyEventsHandler(bIsNaturalFocus);
}
return res;
};
spreadsheet_api.prototype.asc_findText = function(options, callback) {
var result = null;
//***searchEngine
var SearchEngine = this.wb.Search(options);
var Id = this.wb.GetSearchElementId(!options || options.scanForward);
if (null != Id) {
this.wb.SelectSearchElement(Id);
}
if (window["NATIVE_EDITOR_ENJINE"]) {
if (SearchEngine.Count > 0) {
var ws = this.wb.getWorksheet();
var activeCell = this.wbModel.getActiveWs().selectionRange.activeCell;
result = [ws.getCellLeftRelative(activeCell.col, 0), ws.getCellTopRelative(activeCell.row, 0)];
} else {
result = null;
}
} else {
result = SearchEngine.Count;
}
if (callback)
callback(result);
return result;
};
spreadsheet_api.prototype.asc_replaceText = function(options) {
if (this.collaborativeEditing.getGlobalLock() || !this.canEdit()) {
return;
}
var wb = this.wb;
var ws = wb.getWorksheet();
if (this.wb) {
//check user protected range. if sheet at least one protected for this user range
if (options.isReplaceAll) {
if (options.scanOnOnlySheet === Asc.c_oAscSearchBy.Workbook && wb.model.isUserProtectedRangesIntersection()) {
this.handlers.trigger("asc_onError", c_oAscError.ID.ProtectedRangeByOtherUser, c_oAscError.Level.NoCritical);
return;
} else if (options.scanOnOnlySheet === Asc.c_oAscSearchBy.Sheet && ws.model.isUserProtectedRangesIntersection()) {
this.handlers.trigger("asc_onError", c_oAscError.ID.ProtectedRangeByOtherUser, c_oAscError.Level.NoCritical);
return;
}
}
}
if (ws.model.getSheetProtection()) {
this.handlers.trigger("asc_onError", c_oAscError.ID.CannotUseCommandProtectedSheet, c_oAscError.Level.NoCritical);
return;
}
options.lookIn = Asc.c_oAscFindLookIn.Formulas; // При замене поиск только в формулах
wb.replaceCellText(options);
};
spreadsheet_api.prototype.asc_endFindText = function() {
// Нужно очистить поиск
this.wb._cleanFindResults();
};
//***searchEngine
spreadsheet_api.prototype.sync_SearchEndCallback = function () {
this.sendEvent("asc_onSearchEnd");
};
spreadsheet_api.prototype.sync_closeOleEditor = function() {
this.sendEvent("asc_onCloseOleEditor");
};
spreadsheet_api.prototype.sync_changedElements = function (arr) {
this.sendEvent("asc_onUpdateSearchElem", arr);
};
spreadsheet_api.prototype.asc_StartTextAroundSearch = function()
{
let wb = this.wb;
if (!wb || !wb.SearchEngine)
return;
wb.SearchEngine.StartTextAround();
};
spreadsheet_api.prototype.asc_SelectSearchElement = function(sId)
{
let wb = this.wb;
if (!wb || !wb.SearchEngine)
return;
wb.SelectSearchElement(sId);
};
/**
* Делает активной указанную ячейку
* @param {String} reference Ссылка на ячейку вида A1 или R1C1
*/
spreadsheet_api.prototype.asc_findCell = function (reference) {
if (this.asc_getCellEditMode()) {
return;
}
var ws = this.wb.getWorksheet();
var d = ws.findCell(reference);
if (0 === d.length) {
return;
}
// Получаем sheet по имени
ws = d[0].getWorksheet();
if (!ws || ws.getHidden()) {
return;
}
// Индекс листа
var sheetIndex = ws.getIndex();
// Если не совпали индекс листа и индекс текущего, то нужно сменить
if (this.asc_getActiveWorksheetIndex() !== sheetIndex) {
// Меняем активный лист
this.asc_showWorksheet(sheetIndex);
}
ws = this.wb.getWorksheet();
ws.setSelection(1 === d.length ? d[0].getBBox0() : d);
};
spreadsheet_api.prototype.asc_closeCellEditor = function (cancel) {
var result = true;
if (this.wb) {
this.wb.setWizardMode(false);
result = this.wb.closeCellEditor(cancel);
}
return result;
};
spreadsheet_api.prototype.asc_setR1C1Mode = function (value) {
AscCommonExcel.g_R1C1Mode = value;
if (this.wbModel) {
var trueNeedUpdateTarget = this.wb.NeedUpdateTargetForCollaboration;
this._onUpdateAfterApplyChanges();
this.wb._onUpdateSelectionName(true);
this.wb.NeedUpdateTargetForCollaboration = trueNeedUpdateTarget;
}
};
spreadsheet_api.prototype.asc_getR1C1Mode = function (value) {
return AscCommonExcel.g_R1C1Mode;
};
spreadsheet_api.prototype.asc_SetAutoCorrectHyperlinks = function (value) {
window['AscCommonExcel'].g_AutoCorrectHyperlinks = value;
};
spreadsheet_api.prototype.asc_setIncludeNewRowColTable = function (value) {
window['AscCommonExcel'].g_IncludeNewRowColInTable = value;
};
// Spreadsheet interface
spreadsheet_api.prototype.asc_getColumnWidth = function() {
var ws = this.wb.getWorksheet();
return ws.getSelectedColumnWidthInSymbols();
};
spreadsheet_api.prototype.asc_setColumnWidth = function(width) {
this.wb.getWorksheet().changeWorksheet("colWidth", width);
};
spreadsheet_api.prototype.asc_showColumns = function() {
this.wb.getWorksheet().changeWorksheet("showCols");
};
spreadsheet_api.prototype.asc_hideColumns = function() {
this.wb.getWorksheet().changeWorksheet("hideCols");
};
spreadsheet_api.prototype.asc_autoFitColumnWidth = function() {
this.wb.getWorksheet().autoFitColumnsWidth(null);
};
spreadsheet_api.prototype.asc_getRowHeight = function() {
var ws = this.wb.getWorksheet();
return ws.getSelectedRowHeight();
};
spreadsheet_api.prototype.asc_setRowHeight = function(height) {
this.wb.getWorksheet().changeWorksheet("rowHeight", height);
};
spreadsheet_api.prototype.asc_autoFitRowHeight = function() {
this.wb.getWorksheet().autoFitRowHeight(null);
};
spreadsheet_api.prototype.asc_showRows = function() {
this.wb.getWorksheet().changeWorksheet("showRows");
};
spreadsheet_api.prototype.asc_hideRows = function() {
this.wb.getWorksheet().changeWorksheet("hideRows");
};
spreadsheet_api.prototype.asc_group = function(val) {
if(val) {
this.wb.getWorksheet().changeWorksheet("groupRows");
} else {
this.wb.getWorksheet().changeWorksheet("groupCols");
}
};
spreadsheet_api.prototype._canGroupPivot = function () {
var ws = this.wbModel.getActiveWs();
var activeCell = ws.selectionRange.activeCell;
var pivotTable = ws.getPivotTable(activeCell.col, activeCell.row);
if (pivotTable && ws.selectionRange.inContains(pivotTable.getReportRanges())) {
var layout = pivotTable.getLayoutsForGroup(ws.selectionRange);
if (null !== layout.fld) {
return {pivotTable: pivotTable, layout: layout};
}
}
return null;
};
spreadsheet_api.prototype.asc_canGroupPivot = function () {
return !!this._canGroupPivot();
};
spreadsheet_api.prototype._groupPivot = function (confirmation, onRepeat, opt_rangePr, opt_dateTypes) {
var canGroupRes = this._canGroupPivot();
if(canGroupRes) {
canGroupRes.pivotTable.groupPivot(this, canGroupRes.layout, confirmation, onRepeat, opt_rangePr, opt_dateTypes);
}
};
spreadsheet_api.prototype.asc_groupPivot = function (opt_rangePr, opt_dateTypes) {
var t = this;
var onRepeat = function(){
t._groupPivot(true, onRepeat, opt_rangePr, opt_dateTypes);
};
this._groupPivot(false, onRepeat, opt_rangePr, opt_dateTypes);
};
spreadsheet_api.prototype._ungroupPivot = function (confirmation, onRepeat) {
var canGroupRes = this._canGroupPivot();
if(canGroupRes) {
canGroupRes.pivotTable.ungroupPivot(this, canGroupRes.layout, confirmation, onRepeat);
}
};
spreadsheet_api.prototype.asc_ungroupPivot = function () {
var t = this;
var onRepeat = function(){
t._ungroupPivot(true, onRepeat);
};
this._ungroupPivot(false, onRepeat);
};
spreadsheet_api.prototype.asc_ungroup = function(val) {
if(val) {
this.wb.getWorksheet().changeWorksheet("groupRows", true);
} else {
this.wb.getWorksheet().changeWorksheet("groupCols", true);
}
};
spreadsheet_api.prototype.asc_checkAddGroup = function(bUngroup) {
//true - rows, false - columns, null - show dialog, undefined - error
return this.wb.getWorksheet().checkAddGroup(bUngroup);
};
spreadsheet_api.prototype.asc_clearOutline = function() {
this.wb.getWorksheet().changeWorksheet("clearOutline");
};
spreadsheet_api.prototype.asc_changeGroupDetails = function(bExpand) {
this.wb.getWorksheet().changeGroupDetails(bExpand);
};
spreadsheet_api.prototype.asc_insertCells = function(options) {
this.wb.getWorksheet().changeWorksheet("insCell", options);
};
spreadsheet_api.prototype.asc_deleteCells = function(options) {
this.wb.getWorksheet().changeWorksheet("delCell", options);
};
spreadsheet_api.prototype.asc_mergeCells = function(options) {
this.wb.getWorksheet().setSelectionInfo("merge", options);
};
spreadsheet_api.prototype.asc_sortCells = function(options) {
this.wb.getWorksheet().setSelectionInfo("sort", options);
};
spreadsheet_api.prototype.asc_emptyCells = function(options, isMineComments) {
//TODO isMineComments - временный флаг, как только в сдк появится класс для групп, добавить этот флаг туда
this.wb.emptyCells(options, isMineComments);
};
spreadsheet_api.prototype.asc_drawDepCells = function(se) {
/* ToDo
if( se != AscCommonExcel.c_oAscDrawDepOptions.Clear )
this.wb.getWorksheet().prepareDepCells(se);
else
this.wb.getWorksheet().cleanDepCells();*/
};
// Потеряем ли мы что-то при merge ячеек
spreadsheet_api.prototype.asc_mergeCellsDataLost = function(options) {
return this.wb.getWorksheet().getSelectionMergeInfo(options);
};
//нужно ли спрашивать пользователя о расширении диапазона
spreadsheet_api.prototype.asc_sortCellsRangeExpand = function() {
return this.wb.getWorksheet().getSelectionSortInfo();
};
spreadsheet_api.prototype.asc_getSheetViewSettings = function() {
return this.wb.getWorksheet().getSheetViewSettings();
};
spreadsheet_api.prototype.asc_setDisplayGridlines = function (value) {
this.wb.getWorksheet().changeSheetViewSettings(AscCH.historyitem_Worksheet_SetDisplayGridlines, value);
};
spreadsheet_api.prototype.asc_setDisplayHeadings = function (value) {
this.wb.getWorksheet().changeSheetViewSettings(AscCH.historyitem_Worksheet_SetDisplayHeadings, value);
};
spreadsheet_api.prototype.asc_setShowZeros = function (value) {
this.wb.getWorksheet().changeSheetViewSettings(AscCH.historyitem_Worksheet_SetShowZeros, value);
};
spreadsheet_api.prototype.asc_setShowFormulas = function (value) {
this.wb.getWorksheet().changeSheetViewSettings(AscCH.historyitem_Worksheet_SetShowFormulas, value);
};
spreadsheet_api.prototype.asc_setRightToLeft = function (value) {
this.wb.getWorksheet().changeSheetViewSettings(AscCH.historyitem_Worksheet_SetRightToLeft, value);
};
spreadsheet_api.prototype.asc_setDefaultDirection = function (value) {
this.wb.setDefaultDirection(value);
};
spreadsheet_api.prototype.asc_getShowFormulas = function () {
let ws = this.wb.getWorksheet();
return ws.model && ws.model.getShowFormulas();
};
spreadsheet_api.prototype.asc_setDate1904 = function (value) {
this.wb.setDate1904(value);
};
spreadsheet_api.prototype.asc_getDate1904 = function () {
return AscCommon.bDate1904;
};
// Images & Charts
spreadsheet_api.prototype.asc_drawingObjectsExist = function() {
for (var i = 0; i < this.wb.model.aWorksheets.length; i++) {
if (this.wb.model.aWorksheets[i].Drawings && this.wb.model.aWorksheets[i].Drawings.length) {
return true;
}
}
return false;
};
spreadsheet_api.prototype._createSmartArt = function (oSmartArt, oPlaceholder)
{
const oController = this.getGraphicController();
const oDrawingObjects = this.getDrawingObjects();
if (!oDrawingObjects || !oController)
{
return;
}
oSmartArt.setDrawingObjects(oDrawingObjects);
const oWS = oDrawingObjects.getWorksheet();
const oWSModel = oWS.model;
oSmartArt.setWorksheet(oWSModel);
oSmartArt.addToDrawingObjects(undefined, AscCommon.c_oAscCellAnchorType.cellanchorTwoCell);
oSmartArt.checkDrawingBaseCoords();
oSmartArt.generateDrawingPart();
oController.checkChartTextSelection();
oController.resetSelection();
oSmartArt.select(oController, 0);
oWS.setSelectionShape(true);
oController.startRecalculate();
oDrawingObjects.sendGraphicObjectProps();
};
spreadsheet_api.prototype.asc_getChartObject = function(bNoLock) { // Return new or existing chart. For image return null
if(bNoLock !== true){
this.asc_onOpenChartFrame();
}
var ws = this.wb.getWorksheet();
return ws.objectRender.getAscChartObject(bNoLock);
};
spreadsheet_api.prototype.asc_addChartDrawingObject = function(chart) {
var ws = this.wb.getWorksheet();
if (ws.model.getSheetProtection(Asc.c_oAscSheetProtectType.objects)) {
this.asc_onCloseChartFrame();
return false;
}
AscFonts.IsCheckSymbols = true;
var ret = ws.objectRender.addChartDrawingObject(chart);
AscFonts.IsCheckSymbols = false;
this.asc_onCloseChartFrame();
return ret;
};
spreadsheet_api.prototype.asc_getRecommendedChartData = function() {
if(!this.wb) {
return null;
}
return this.wb.getRecommendedChartData();
};
spreadsheet_api.prototype.asc_getChartData = function(nType) {
if(!this.wb) {
return null;
}
return this.wb.getChartData(nType);
};
spreadsheet_api.prototype.asc_addChartSpace = function(oChartSpace) {
var ws = this.wb.getWorksheet();
if (ws.model.getSheetProtection(Asc.c_oAscSheetProtectType.objects)) {
return;
}
const oWS = this.wb.getWorksheet();
if(!oWS || !oWS.objectRender) {
return;
}
oWS.objectRender.addChartSpace(oChartSpace);
};
spreadsheet_api.prototype.getScaleCoefficientsForOleTableImage = function (nImageWidth, nImageHeight) {
const oThis = this;
return this.wb._executeWithoutZoom(function () {
const oWorksheet = oThis.wb.getWorksheet();
const oSingleChart = oWorksheet.isHaveOnlyOneChart(true);
let oRangeSizes = {};
if (oSingleChart) {
oRangeSizes = {
width: oSingleChart.extX * AscCommon.g_dKoef_mm_to_pix,
height: oSingleChart.extY * AscCommon.g_dKoef_mm_to_pix
};
} else {
const oOleSize = oThis.wbModel.getOleSize().getLast();
if (oOleSize) {
oRangeSizes = oWorksheet.getPrintOleRangePosition(oOleSize);
}
}
if (oRangeSizes.width && oRangeSizes.height) {
return {
widthCoefficient: nImageWidth / oRangeSizes.width,
heightCoefficient: nImageHeight / oRangeSizes.height
};
}
return {widthCoefficient: 1, heightCoefficient: 1};
});
};
/**
* Loading ole editor
* @param {{}} [oOleObjectInfo] info from oleObject
*/
spreadsheet_api.prototype.asc_addTableOleObjectInOleEditor = function(oOleObjectInfo) {
this.sync_StartAction(Asc.c_oAscAsyncActionType.BlockInteraction, Asc.c_oAscAsyncAction.Open);
// на случай, если изображение поставили на загрузку, закрыли редактор, и потом опять открыли
this.sync_EndAction(Asc.c_oAscAsyncActionType.BlockInteraction, Asc.c_oAscAsyncAction.LoadImage);
this.sendFromFrameToGeneralEditor({
"type": AscCommon.c_oAscFrameDataType.OpenFrame
});
let bIsCreatingOleObject = false;
if (!oOleObjectInfo)
{
oOleObjectInfo = {"binary": AscCommon.getEmpty()};
bIsCreatingOleObject = true;
}
const sStream = oOleObjectInfo["binary"];
const oThis = this;
const oFile = new AscCommon.OpenFileResult();
oFile.bSerFormat = AscCommon.checkStreamSignature(sStream, AscCommon.c_oSerFormat.Signature);
oFile.data = sStream;
this.isEditOleMode = true;
this.isChartEditor = false;
this.isFromSheetEditor = oOleObjectInfo["isFromSheetEditor"];
const oDocumentImageUrls = oOleObjectInfo["documentImageUrls"];
this.asc_CloseFile();
this.fAfterLoad = function () {
const nImageWidth = oOleObjectInfo["imageWidth"];
const nImageHeight = oOleObjectInfo["imageHeight"];
if (nImageWidth && nImageHeight) {
oThis.saveImageCoefficients = oThis.getScaleCoefficientsForOleTableImage(nImageWidth, nImageHeight);
}
if (bIsCreatingOleObject)
{
AscFormat.ExecuteNoHistory(function ()
{
const oFirstWorksheet = oThis.wbModel.getWorksheet(0);
if (oFirstWorksheet)
{
oFirstWorksheet.sName = '';
const sName = oThis.wbModel.getUniqueSheetNameFrom(AscCommon.translateManager.getValue(AscCommonExcel.g_sNewSheetNamePattern), false);
oFirstWorksheet.setName(sName);
oThis.sheetsChanged();
}
}, oThis, []);
}
oThis.wb.scrollToOleSize();
// добавляем первый поинт после загрузки, чтобы в локальную историю добавился либо стандартный oleSize, либо заданный пользователем
const oleSize = oThis.wb.getOleSize();
oleSize.addPointToLocalHistory();
oThis.wb.onOleEditorReady();
oThis.sync_EndAction(Asc.c_oAscAsyncActionType.BlockInteraction, Asc.c_oAscAsyncAction.Open);
}
this.imagesFromGeneralEditor = oDocumentImageUrls || {};
this.openDocument(oFile);
};
/**
* get binary info about changed ole object
* @returns {{}} binary info about oleObject
*/
spreadsheet_api.prototype.asc_getBinaryInfoOleObject = function () {
const sDataUrl = this.wb.getImageFromTableOleObject();
const oBinaryFileWriter = new AscCommonExcel.BinaryFileWriter(this.wbModel);
const arrBinaryData = oBinaryFileWriter.Write().split(';');
const sCleanBinaryData = arrBinaryData[arrBinaryData.length - 1];
const oBinaryInfo = {};
const arrRasterImageIds = [];
const arrWorksheetLength = this.wbModel.aWorksheets.length;
for (let i = 0; i < arrWorksheetLength; i += 1) {
const oWorksheet = this.wbModel.aWorksheets[i];
const arrDrawings = oWorksheet.Drawings;
if (arrDrawings) {
for (let j = 0; j < arrDrawings.length; j += 1) {
const oDrawing = arrDrawings[j];
oDrawing.graphicObject.getAllRasterImages(arrRasterImageIds);
}
}
}
const urlsForAddToHistory = [];
for (let i = 0; i < arrRasterImageIds.length; i += 1) {
const url = AscCommon.g_oDocumentUrls.mediaPrefix + arrRasterImageIds[i];
if (!(this.imagesFromGeneralEditor && this.imagesFromGeneralEditor[url] && this.imagesFromGeneralEditor[url] === AscCommon.g_oDocumentUrls.getUrls()[url])) {
urlsForAddToHistory.push(arrRasterImageIds[i]);
}
}
oBinaryInfo["binary"] = sCleanBinaryData;
oBinaryInfo["base64Image"] = sDataUrl;
oBinaryInfo["isFromSheetEditor"] = this.isFromSheetEditor;
oBinaryInfo["imagesForAddToHistory"] = urlsForAddToHistory;
if (this.saveImageCoefficients) {
oBinaryInfo["widthCoefficient"] = this.saveImageCoefficients.widthCoefficient;
oBinaryInfo["heightCoefficient"] = this.saveImageCoefficients.heightCoefficient;
delete this.saveImageCoefficients;
}
return oBinaryInfo;
}
spreadsheet_api.prototype.asc_toggleChangeVisibleAreaOleEditor = function (bForceValue) {
const ws = this.wb.getWorksheet();
ws.cleanSelection();
ws.endEditChart();
ws._endSelectionShape();
const previousValue = this.isEditVisibleAreaOleEditor;
if (typeof bForceValue === 'boolean') {
this.isEditVisibleAreaOleEditor = bForceValue;
} else {
this.isEditVisibleAreaOleEditor = !this.isEditVisibleAreaOleEditor;
}
if (this.isEditVisibleAreaOleEditor) {
this.wb.setCellEditMode(false);
}
const currentValue = this.isEditVisibleAreaOleEditor;
if (previousValue === true && currentValue === false) {
const oOleSize = this.wbModel.getOleSize();
oOleSize.addToGlobalHistory();
}
ws._drawSelection();
};
spreadsheet_api.prototype.asc_toggleShowVisibleAreaOleEditor = function (bForceValue) {
var newValue;
if (typeof bForceValue === 'boolean') {
newValue = bForceValue;
} else {
newValue = !this.isShowVisibleAreaOleEditor;
}
var ws = this.wb.getWorksheet();
ws.cleanSelection();
if (newValue) {
this.isShowVisibleAreaOleEditor = newValue;
ws.cleanSelection();
ws._drawSelection();
} else {
ws.cleanSelection();
this.isShowVisibleAreaOleEditor = newValue;
ws._drawSelection();
}
};
spreadsheet_api.prototype.asc_editChartDrawingObject = function(chart) {
var ws = this.wb.getWorksheet();
var ret = ws.objectRender.editChartDrawingObject(chart);
this.asc_onCloseChartFrame();
return ret;
};
spreadsheet_api.prototype.asc_addImageDrawingObject = function (urls, imgProp, token) {
var t = this;
var ws = t.wb.getWorksheet();
if (ws.model.getSheetProtection(Asc.c_oAscSheetProtectType.objects)) {
return false;
}
this.AddImageUrl(urls, imgProp, token, null);
};
spreadsheet_api.prototype.asc_AddMath = function(Type)
{
var t = this, fonts = {};
fonts["Cambria Math"] = 1;
t._loadFonts(fonts, function() {t.asc_AddMath2(Type);});
};
spreadsheet_api.prototype.asc_AddMath2 = function(Type)
{
var ws = this.wb.getWorksheet();
ws.objectRender.addMath(Type);
};
spreadsheet_api.prototype.asc_ConvertMathView = function(isToLinear, isAll)
{
var ws = this.wb.getWorksheet();
ws.objectRender.convertMathView(isToLinear, isAll);
};
spreadsheet_api.prototype.asc_SetMathProps = function(MathProps)
{
var ws = this.wb.getWorksheet();
ws.objectRender.setMathProps(MathProps);
};
spreadsheet_api.prototype.asc_showImageFileDialog = function() {
// ToDo заменить на общую функцию для всех
this.asc_addImage();
};
spreadsheet_api.prototype._addImageUrl = function(arrUrls, oOptionObject) {
if (oOptionObject && oOptionObject.sendUrlsToFrameEditor && this.isOpenedChartFrame) {
this.addImageUrlsFromGeneralToFrameEditor(arrUrls);
return;
}
const oWS = this.wb.getWorksheet();
if (oWS) {
if (oOptionObject) {
if (oOptionObject.isImageChangeUrl || oOptionObject.isShapeImageChangeUrl || oOptionObject.isTextArtChangeUrl || oOptionObject.fAfterUploadOleObjectImage) {
oWS.objectRender.editImageDrawingObject(arrUrls[0], oOptionObject);
} else {
if (this.ImageLoader) {
const oApi = this;
this.ImageLoader.LoadImagesWithCallback(arrUrls, function() {
const arrImages = [];
for(let i = 0; i < arrUrls.length; ++i) {
const oImage = oApi.ImageLoader.LoadImage(arrUrls[i], 1);
if(oImage){
arrImages.push(oImage);
}
}
oApi.wbModel.addImages(arrImages, oOptionObject);
}, []);
}
}
} else {
oWS.objectRender.addImageDrawingObject(arrUrls, null);
}
}
};
// signatures
spreadsheet_api.prototype.asc_addSignatureLine = function (oPr, Width, Height, sImgUrl) {
var ws = this.wb && this.wb.getWorksheet();
if (ws && ws.model && ws.model.getSheetProtection(Asc.c_oAscSheetProtectType.objects)) {
return false;
}
if(ws && ws.objectRender){
ws.objectRender.addSignatureLine(oPr, Width, Height, sImgUrl);
}
};
spreadsheet_api.prototype.asc_getAllSignatures = function(){
var ret = [];
var aSpTree = [];
if (this.wbModel) {
this.wbModel.forEach(function (ws) {
for (var j = 0; j < ws.Drawings.length; ++j) {
aSpTree.push(ws.Drawings[j].graphicObject);
}
});
}
AscFormat.DrawingObjectsController.prototype.getAllSignatures2(ret, aSpTree);
return ret;
};
spreadsheet_api.prototype.getSignatureLineSp = function(sGuid) {
var ret = [];
var aSpTree = [];
if (this.wbModel) {
this.wbModel.forEach(function (ws) {
for (var j = 0; j < ws.Drawings.length; ++j) {
aSpTree.push(ws.Drawings[j].graphicObject);
}
});
}
AscFormat.DrawingObjectsController.prototype.getAllSignatures2(ret, aSpTree);
for(var i = 0; i < aSpTree.length; ++i){
if(aSpTree[i].signatureLine && aSpTree[i].signatureLine.id === sGuid){
return aSpTree[i];
}
}
return null;
};
spreadsheet_api.prototype.asc_CallSignatureDblClickEvent = function(sGuid){
var oSp = this.getSignatureLineSp(sGuid);
if(oSp){
this.sendEvent("asc_onSignatureDblClick", sGuid, oSp.extX, oSp.extY);
}
};
spreadsheet_api.prototype.gotoSignatureInternal = function(sGuid){
var oSp = this.getSignatureLineSp(sGuid);
if(oSp && !oSp.group){
var oWorksheet = oSp.worksheet;
if(oWorksheet) {
var nSheetIdx = oWorksheet.getIndex();
if (this.asc_getActiveWorksheetIndex() !== nSheetIdx) {
this.asc_showWorksheet(nSheetIdx);
}
var oWSView = this.wb.getWorksheet();
if(oWSView) {
var oRender = oWSView.objectRender;
if(oRender) {
var oController = oRender.controller;
if(oController) {
oSp.Set_CurrentElement(false);
oController.selection.textSelection = null;
oWSView.setSelectionShape(true);
oController.updateSelectionState();
oController.updateOverlay();
oRender.sendGraphicObjectProps();
}
}
}
}
}
};
//-------------------------------------------------------
spreadsheet_api.prototype.asc_getCurrentDrawingMacrosName = function() {
var ws = this.wb.getWorksheet();
return ws.objectRender.getCurrentDrawingMacrosName();
};
spreadsheet_api.prototype.asc_assignMacrosToCurrentDrawing = function(sName) {
var ws = this.wb.getWorksheet();
var sGuid = this.asc_getMacrosGuidByName(sName);
return ws.objectRender.assignMacrosToCurrentDrawing(sGuid);
};
spreadsheet_api.prototype.asc_setSelectedDrawingObjectLayer = function(layerType) {
var ws = this.wb.getWorksheet();
return ws.objectRender.setGraphicObjectLayer(layerType);
};
spreadsheet_api.prototype.asc_setSelectedDrawingObjectAlign = function(alignType) {
var ws = this.wb.getWorksheet();
return ws.objectRender.setGraphicObjectAlign(alignType);
};
spreadsheet_api.prototype.asc_DistributeSelectedDrawingObjectHor = function() {
var ws = this.wb.getWorksheet();
return ws.objectRender.distributeGraphicObjectHor();
};
spreadsheet_api.prototype.asc_DistributeSelectedDrawingObjectVer = function() {
var ws = this.wb.getWorksheet();
return ws.objectRender.distributeGraphicObjectVer();
};
spreadsheet_api.prototype.asc_getSelectedDrawingObjectsCount = function()
{
var ws = this.wb.getWorksheet();
return ws.objectRender.getSelectedDrawingObjectsCount();
};
spreadsheet_api.prototype.asc_canEditCrop = function()
{
var ws = this.wb.getWorksheet();
return ws.objectRender.controller.canStartImageCrop();
};
spreadsheet_api.prototype.asc_startEditCrop = function()
{
var ws = this.wb.getWorksheet();
return ws.objectRender.controller.startImageCrop();
};
spreadsheet_api.prototype.asc_endEditCrop = function()
{
var ws = this.wb.getWorksheet();
return ws.objectRender.controller.endImageCrop();
};
spreadsheet_api.prototype.asc_cropFit = function()
{
var ws = this.wb.getWorksheet();
return ws.objectRender.controller.cropFit();
};
spreadsheet_api.prototype.asc_cropFill = function()
{
var ws = this.wb.getWorksheet();
return ws.objectRender.controller.cropFill();
};
spreadsheet_api.prototype.asc_addTextArt = function(nStyle) {
var ws = this.wb.getWorksheet();
if (ws.model.getSheetProtection(Asc.c_oAscSheetProtectType.objects)) {
return false;
}
return ws.objectRender.addTextArt(nStyle);
};
spreadsheet_api.prototype.asc_checkDataRange = function(dialogType, dataRange, fullCheck, isRows, chartType) {
return parserHelp.checkDataRange(this.wbModel, this.wb, dialogType, dataRange, fullCheck, isRows, chartType);
};
// Для вставки диаграмм в Word
spreadsheet_api.prototype.asc_getBinaryFileWriter = function() {
return new AscCommonExcel.BinaryFileWriter(this.wbModel);
};
spreadsheet_api.prototype.asc_getWordChartObject = function() {
var ws = this.wb.getWorksheet();
return ws.objectRender.getWordChartObject();
};
spreadsheet_api.prototype.asc_cleanWorksheet = function() {
var ws = this.wb.getWorksheet(); // Для удаления данных листа и диаграмм
if (ws.objectRender) {
ws.objectRender.cleanWorksheet();
}
};
// Выставление данных (пока используется только для MailMerge)
spreadsheet_api.prototype.asc_setData = function(oData) {
this.wb.getWorksheet().setData(oData);
};
// Получение данных
spreadsheet_api.prototype.asc_getData = function() {
this.asc_closeCellEditor();
return this.wb.getWorksheet().getData();
};
// Cell comment interface
spreadsheet_api.prototype.asc_addComment = function (oComment) {
if (this.collaborativeEditing.getGlobalLock() || (!this.canEdit() && !this.isRestrictionComments())) {
return false;
}
let oPlace = oComment.bDocument ? this.wb : (this.wb && this.wb.getWorksheet());
oPlace && oPlace.cellCommentator.addComment(oComment);
};
spreadsheet_api.prototype.asc_changeComment = function (id, oComment) {
if (this.wb) {
if (oComment.bDocument) {
this.wb.cellCommentator.changeComment(id, oComment);
} else {
var ws = this.wb.getWorksheet();
ws.cellCommentator.changeComment(id, oComment);
}
}
};
spreadsheet_api.prototype.asc_selectComment = function (id) {
this.wb && this.wb.getWorksheet().cellCommentator.selectComment(id);
};
spreadsheet_api.prototype.asc_showComment = function (id, bNew) {
if (this.wb) {
let ws = this.wb.getWorksheet();
ws.cellCommentator.showCommentById(id, bNew);
}
};
spreadsheet_api.prototype.asc_findComment = function (id) {
let ws = this.wb && this.wb.getWorksheet();
return ws ? ws.cellCommentator.findComment(id) : null;
};
spreadsheet_api.prototype.asc_removeComment = function (id) {
if (this.wb) {
this.wb.removeComment(id);
}
};
spreadsheet_api.prototype.asc_RemoveAllComments = function (isMine, isCurrent) {
if (this.collaborativeEditing.getGlobalLock() || (!this.canEdit() && !this.isRestrictionComments())) {
return;
}
if (this.wb) {
this.wb.removeAllComments(isMine, isCurrent);
}
};
spreadsheet_api.prototype.asc_GetCommentLogicPositionv = function (sId) {
return -1;
};
spreadsheet_api.prototype.asc_ResolveAllComments = function (isMine, isCurrent, arrIds) {
if (this.collaborativeEditing.getGlobalLock() || !this.canEdit()) {
return;
}
if (this.wb) {
this.wb.resolveAllComments(isMine, isCurrent);
}
};
spreadsheet_api.prototype.asc_showComments = function (isShowSolved) {
if (this.wb) {
this.wb.showComments(true, isShowSolved);
}
};
spreadsheet_api.prototype.asc_hideComments = function () {
if (this.wb) {
this.wb.showComments(false, false);
}
};
// Shapes
spreadsheet_api.prototype.setStartPointHistory = function() {
this.noCreatePoint = true;
this.exucuteHistory = true;
this.asc_stopSaving();
};
spreadsheet_api.prototype.setEndPointHistory = function() {
this.noCreatePoint = false;
this.exucuteHistoryEnd = true;
this.asc_continueSaving();
};
spreadsheet_api.prototype.asc_startAddShape = function(sPreset) {
var ws = this.wb.getWorksheet();
if (ws.model.getSheetProtection(Asc.c_oAscSheetProtectType.objects)) {
this.asc_endAddShape();
return false;
}
this.stopInkDrawer();
this.cancelEyedropper();
this.isStartAddShape = this.controller.isShapeAction = true;
ws.objectRender.controller.startTrackNewShape(sPreset);
};
spreadsheet_api.prototype.asc_endAddShape = function() {
this.isStartAddShape = false;
this.handlers.trigger("asc_onEndAddShape");
};
spreadsheet_api.prototype.asc_doubleClickOnTableOleObject = function (obj) {
this.isOleEditor = true; // Для совместного редактирования
this.asc_onOpenChartFrame();
// console.log(editor.WordControl)
// if(!window['IS_NATIVE_EDITOR']) {
// this.WordControl.onMouseUpMainSimple();
// }
if(this.handlers.hasTrigger("asc_doubleClickOnTableOleObject"))
{
this.sendEvent("asc_doubleClickOnTableOleObject", obj);
}
else
{
this.sendEvent("asc_doubleClickOnChart", obj); // TODO: change event type
}
};
spreadsheet_api.prototype.asc_canEditGeometry = function () {
var ws = this.wb.getWorksheet();
if(ws && ws.objectRender && ws.objectRender.controller) {
return ws.objectRender.controller.canEditGeometry();
}
return false;
};
spreadsheet_api.prototype.asc_editPointsGeometry = function() {
var ws = this.wb.getWorksheet();
if(ws && ws.objectRender && ws.objectRender.controller) {
ws.objectRender.controller.startEditGeometry();
}
};
spreadsheet_api.prototype.asc_addShapeOnSheet = function(sPreset) {
if(this.wb){
var ws = this.wb.getWorksheet();
if (ws.model.getSheetProtection(Asc.c_oAscSheetProtectType.objects)) {
return false;
}
if(ws && ws.objectRender){
ws.objectRender.addShapeOnSheet(sPreset);
}
}
};
spreadsheet_api.prototype.asc_addOleObjectAction = function(sLocalUrl, sData, sApplicationId, fWidth, fHeight, nWidthPix, nHeightPix, bSelect, arrImagesForAddToHistory)
{
var _image = this.ImageLoader.LoadImage(AscCommon.getFullImageSrc2(sLocalUrl), 1);
if (null != _image){
var ws = this.wb.getWorksheet();
if (ws.model.getSheetProtection(Asc.c_oAscSheetProtectType.objects)) {
return false;
}
if(ws.objectRender){
this.asc_canPaste();
ws.objectRender.addOleObject(fWidth, fHeight, nWidthPix, nHeightPix, sLocalUrl, sData, sApplicationId, bSelect, arrImagesForAddToHistory);
this.asc_endPaste();
}
}
};
spreadsheet_api.prototype.asc_editOleObjectAction = function(oOleObject, sImageUrl, sData, fWidth, fHeight, nPixWidth, nPixHeight, arrImagesForAddToHistory)
{
if (oOleObject)
{
var ws = this.wb.getWorksheet();
if(ws.objectRender){
this.asc_canPaste();
ws.objectRender.editOleObject(oOleObject, sData, sImageUrl, fWidth, fHeight, nPixWidth, nPixHeight, arrImagesForAddToHistory);
this.asc_endPaste();
}
}
};
spreadsheet_api.prototype.asc_startEditCurrentOleObject = function(){
var ws = this.wb.getWorksheet();
if(ws && ws.objectRender){
ws.objectRender.startEditCurrentOleObject();
}
};
spreadsheet_api.prototype.asc_isAddAutoshape = function() {
return this.isStartAddShape;
};
spreadsheet_api.prototype.onInkDrawerChangeState = function() {
const oController = this.getGraphicController();
if(!oController) {
return;
}
if (this.isStartAddShape) {
this.asc_endAddShape();
}
this.cancelEyedropper();
if (this.isFormatPainterOn())
{
this.formatPainter.putState(AscCommon.c_oAscFormatPainterState.kOff);
if (this.wb) {
this.wb.formatPainter(AscCommon.c_oAscFormatPainterState.kOff, undefined);
}
}
oController.onInkDrawerChangeState();
};
spreadsheet_api.prototype.asc_canAddShapeHyperlink = function() {
var ws = this.wb.getWorksheet();
return ws.objectRender.controller.canAddHyperlink();
};
spreadsheet_api.prototype.asc_canGroupGraphicsObjects = function() {
var ws = this.wb.getWorksheet();
return ws.objectRender.controller.canGroup();
};
spreadsheet_api.prototype.asc_groupGraphicsObjects = function() {
var ws = this.wb.getWorksheet();
ws.objectRender.groupGraphicObjects();
};
spreadsheet_api.prototype.asc_canUnGroupGraphicsObjects = function() {
var ws = this.wb.getWorksheet();
return ws.objectRender.controller.canUnGroup();
};
spreadsheet_api.prototype.asc_unGroupGraphicsObjects = function() {
var ws = this.wb.getWorksheet();
ws.objectRender.unGroupGraphicObjects();
};
spreadsheet_api.prototype.asc_canMergeSelectedShapes = function (operation) {
return AscFormat.canMergeSelectedShapes(operation);
};
spreadsheet_api.prototype.asc_mergeSelectedShapesAction = function (operation) {
const controller = this.wb.getWorksheet().objectRender.controller;
if (controller.checkSelectedObjectsProtection())
return;
if (this.asc_canMergeSelectedShapes(operation)) {
controller.checkSelectedObjectsAndCallback(
AscFormat.mergeSelectedShapes, [operation], false,
AscDFH.historydescription_Presentation_MergeSelectedShapes
);
}
};
spreadsheet_api.prototype.asc_changeShapeType = function(value) {
this.asc_setGraphicObjectProps(new Asc.asc_CImgProperty({ShapeProperties: {type: value}}));
};
spreadsheet_api.prototype.asc_getGraphicObjectProps = function() {
var ws = this.wb.getWorksheet();
if (ws && ws.objectRender && ws.objectRender.controller) {
return ws.objectRender.controller.getGraphicObjectProps();
}
return null;
};
spreadsheet_api.prototype.asc_GetSelectedText = function(bClearText, select_Pr) {
bClearText = typeof(bClearText) === "boolean" ? bClearText : false;
var ws = this.wb.getWorksheet();
if (this.wb.getCellEditMode()) {
var fragments = this.wb.cellEditor.copySelection();
if (null !== fragments) {
return AscCommonExcel.getFragmentsText(fragments);
}
}
if (ws && ws.objectRender && ws.objectRender.controller) {
return ws.objectRender.controller.GetSelectedText(bClearText, select_Pr);
}
return "";
};
spreadsheet_api.prototype.asc_setGraphicObjectProps = function(props) {
if (!this.canEdit()) {
return;
}
var ws = this.wb.getWorksheet();
var fReplaceCallback = null, sImageUrl = null, sToken = undefined;
if(!AscCommon.isNullOrEmptyString(props.ImageUrl)){
if(!g_oDocumentUrls.getImageLocal(props.ImageUrl)){
sImageUrl = props.ImageUrl;
sToken = props.Token;
fReplaceCallback = function(sLocalUrl){
props.ImageUrl = sLocalUrl;
}
}
}
else if(props.ShapeProperties && props.ShapeProperties.fill && props.ShapeProperties.fill.fill &&
!AscCommon.isNullOrEmptyString(props.ShapeProperties.fill.fill.url)){
if(!g_oDocumentUrls.getImageLocal(props.ShapeProperties.fill.fill.url)){
sImageUrl = props.ShapeProperties.fill.fill.url;
sToken = props.ShapeProperties.fill.fill.token;
fReplaceCallback = function(sLocalUrl){
props.ShapeProperties.fill.fill.url = sLocalUrl;
}
}
}
else if(props.ShapeProperties && props.ShapeProperties.textArtProperties &&
props.ShapeProperties.textArtProperties.Fill && props.ShapeProperties.textArtProperties.Fill.fill &&
!AscCommon.isNullOrEmptyString(props.ShapeProperties.textArtProperties.Fill.fill.url)){
if(!g_oDocumentUrls.getImageLocal(props.ShapeProperties.textArtProperties.Fill.fill.url)){
sImageUrl = props.ShapeProperties.textArtProperties.Fill.fill.url;
sToken = props.ShapeProperties.textArtProperties.Fill.fill.token;
fReplaceCallback = function(sLocalUrl){
props.ShapeProperties.textArtProperties.Fill.fill.url = sLocalUrl;
}
}
}
if(fReplaceCallback) {
if (window["AscDesktopEditor"] && window["AscDesktopEditor"]["IsLocalFile"]()) {
var firstUrl = window["AscDesktopEditor"]["LocalFileGetImageUrl"](sImageUrl);
firstUrl = g_oDocumentUrls.getImageUrl(firstUrl);
fReplaceCallback(firstUrl);
ws.objectRender.setGraphicObjectProps(props);
return;
}
AscCommon.sendImgUrls(this, [sImageUrl], function (data) {
// TODO: remove this code!!!
if (window["IS_NATIVE_EDITOR"] && Asc.editor.isLocalDocument && data.length === 0)
data[0] = {url:sImageUrl,path:sImageUrl};
if (data && data[0] && data[0].url !== "error") {
fReplaceCallback(data[0].url);
ws.objectRender.setGraphicObjectProps(props);
}
}, undefined, sToken);
}
else{
var sBulletSymbol = props.asc_getBulletSymbol && props.asc_getBulletSymbol();
var sBulletFont = props.asc_getBulletFont && props.asc_getBulletFont();
if(typeof sBulletSymbol === "string" && sBulletSymbol.length > 0
&& typeof sBulletFont === "string" && sBulletFont.length > 0) {
var t = this;
var fonts = {};
fonts[sBulletFont] = 1;
AscFonts.FontPickerByCharacter.checkTextLight(sBulletSymbol);
t._loadFonts(fonts, function() {
ws.objectRender.setGraphicObjectProps(props);
});
}
else {
var oSlicerPr = props.SlicerProperties;
var sForCheck = null;
if(oSlicerPr && typeof oSlicerPr.caption === "string" && oSlicerPr.caption.length > 0) {
sForCheck = oSlicerPr.caption;
}
if(typeof sForCheck === "string" && sForCheck.length > 0) {
AscFonts.FontPickerByCharacter.checkText(sForCheck, this, function () {
ws.objectRender.setGraphicObjectProps(props);
});
}
else {
ws.objectRender.setGraphicObjectProps(props);
}
}
}
};
spreadsheet_api.prototype.asc_getOriginalImageSize = function() {
var ws = this.wb.getWorksheet();
return ws.objectRender.getOriginalImageSize();
};
spreadsheet_api.prototype.asc_setInterfaceDrawImagePlaceTextArt = function(elementId) {
this.textArtElementId = elementId;
};
spreadsheet_api.prototype.asc_changeImageFromFile = function() {
this.asc_addImage({isImageChangeUrl: true});
};
spreadsheet_api.prototype.asc_changeShapeImageFromFile = function(type) {
this.asc_addImage({isShapeImageChangeUrl: true, textureType: type});
};
spreadsheet_api.prototype.asc_changeArtImageFromFile = function(type) {
this.asc_addImage({isTextArtChangeUrl: true, textureType: type});
};
spreadsheet_api.prototype.getImageDataFromSelection = function() {
var ws = this.wb.getWorksheet();
return ws.objectRender.controller.getImageDataFromSelection();
};
spreadsheet_api.prototype.putImageToSelection = function(sImageSrc, nWidth, nHeight, replaceMode) {
var ws = this.wb.getWorksheet();
return ws.objectRender.controller.putImageToSelection(sImageSrc, nWidth, nHeight, replaceMode);
};
spreadsheet_api.prototype.getPluginContextMenuInfo = function () {
const oWorksheet = this.wb.getWorksheet();
if(oWorksheet){
if(oWorksheet.isSelectOnShape){
return oWorksheet.objectRender.controller.getPluginSelectionInfo();
}
else{
return new AscCommon.CPluginCtxMenuInfo(Asc.c_oPluginContextMenuTypes.Selection);
}
}
return new AscCommon.CPluginCtxMenuInfo();
};
spreadsheet_api.prototype.asc_putPrLineSpacing = function(type, value) {
var ws = this.wb.getWorksheet();
ws.objectRender.controller.putPrLineSpacing(type, value);
};
spreadsheet_api.prototype.asc_putLineSpacingBeforeAfter = function(type, value) { // "type == 0" means "Before", "type == 1" means "After"
var ws = this.wb.getWorksheet();
ws.objectRender.controller.putLineSpacingBeforeAfter(type, value);
};
spreadsheet_api.prototype.asc_setDrawImagePlaceParagraph = function(element_id, props) {
var ws = this.wb.getWorksheet();
ws.objectRender.setDrawImagePlaceParagraph(element_id, props);
};
spreadsheet_api.prototype.asc_replaceLoadImageCallback = function(fCallback){
if(this.wb){
var ws = this.wb.getWorksheet();
if(ws.objectRender){
ws.objectRender.asyncImageEndLoaded = fCallback;
}
}
};
spreadsheet_api.prototype.asyncImageEndLoaded = function(_image) {
if (this.wb) {
var ws = this.wb.getWorksheet();
if (ws.objectRender.asyncImageEndLoaded) {
ws.objectRender.asyncImageEndLoaded(_image);
}
}
};
spreadsheet_api.prototype.asyncImagesDocumentEndLoaded = function() {
if (c_oAscAdvancedOptionsAction.None === this.advancedOptionsAction && this.wb && !window["NATIVE_EDITOR_ENJINE"]) {
var ws = this.wb.getWorksheet();
ws.objectRender.showDrawingObjects();
ws.objectRender.controller.getGraphicObjectProps();
}
};
spreadsheet_api.prototype.asyncImageEndLoadedBackground = function() {
var worksheet = this.wb.getWorksheet();
if (worksheet && worksheet.objectRender) {
var drawing_area = worksheet.objectRender.drawingArea;
if (drawing_area) {
for (var i = 0; i < drawing_area.frozenPlaces.length; ++i) {
worksheet.objectRender.showDrawingObjects();
worksheet.objectRender.controller && worksheet.objectRender.controller.getGraphicObjectProps();
}
}
}
};
// spellCheck
spreadsheet_api.prototype.cleanSpelling = function (isCellEditing) {
if (!this.spellcheckState.lockSpell) {
if (this.spellcheckState.startCell) {
var cellsChange = this.spellcheckState.cellsChange;
var lastFindOptions = this.spellcheckState.lastFindOptions;
if (cellsChange.length !== 0 && lastFindOptions && !isCellEditing) {
this.asc_replaceMisspelledWords(lastFindOptions);
}
this.handlers.trigger("asc_onSpellCheckVariantsFound", null);
this.spellcheckState.clean();
} else {
var ws = this.wb.getWorksheet();
if (ws) {
var maxC = ws.model.getColsCount() - 1;
var maxR = ws.model.getRowsCount() - 1;
if (-1 !== maxC || -1 !== maxR) {
this.handlers.trigger("asc_onSpellCheckVariantsFound", null);
}
}
}
}
};
spreadsheet_api.prototype.SpellCheck_CallBack = function (e) {
this.spellcheckState.lockSpell = false;
var ws = this.wb.getWorksheet();
var type = e["type"];
var usrWords = e["usrWords"];
var cellsInfo = e["cellsInfo"];
var changeWords = this.spellcheckState.changeWords;
var ignoreWords = this.spellcheckState.ignoreWords;
var lastOptions = this.spellcheckState.lastFindOptions;
var cellsChange = this.spellcheckState.cellsChange;
var isStart = this.spellcheckState.isStart;
if (type === "spell") {
var usrCorrect = e["usrCorrect"];
this.spellcheckState.wordsIndex = e["wordsIndex"];
var lastIndex = this.spellcheckState.lastIndex;
var activeCell = ws.model.selectionRange.activeCell;
var isIgnoreUppercase = this.spellcheckState.isIgnoreUppercase;
for (var i = 0; i < usrWords.length; i++) {
if (this.spellcheckState.isIgnoreNumbers) {
var isNumberInStr = /\d+/;
if (usrWords[i].match(isNumberInStr)) {
usrCorrect[i] = true;
}
}
if (ignoreWords[usrWords[i]] || changeWords[usrWords[i]] || usrWords[i].length === 1
|| (isIgnoreUppercase && AscCommon.IsAbbreviation(usrWords[i]))) {
usrCorrect[i] = true;
}
}
while (!isStart && usrCorrect[lastIndex]) {
++lastIndex;
}
this.spellcheckState.lockSpell = false;
this.spellcheckState.lastIndex = lastIndex;
var currIndex = cellsInfo[lastIndex];
if (currIndex && (currIndex.col !== activeCell.col || currIndex.row !== activeCell.row)) {
var currentCellIsInactive = true;
}
while (isStart && currentCellIsInactive && usrCorrect[lastIndex]) {
if (!cellsInfo[lastIndex + 1] || cellsInfo[lastIndex + 1].col !== cellsInfo[lastIndex].col) {
var cell = cellsInfo[lastIndex];
cellsChange.push(new Asc.Range(cell.col, cell.row, cell.col, cell.row));
}
++lastIndex;
}
if (undefined === cellsInfo[lastIndex]) {
this.spellcheckState.nextRow();
this.asc_nextWord();
return;
}
var cellStartIndex = 0;
while (cellsInfo[cellStartIndex].col !== cellsInfo[lastIndex].col) {
cellStartIndex++;
}
e["usrWords"].splice(0, cellStartIndex);
e["usrCorrect"].splice(0, cellStartIndex);
e["usrLang"].splice(0, cellStartIndex);
e["cellsInfo"].splice(0, cellStartIndex);
e["wordsIndex"].splice(0, cellStartIndex);
lastIndex = lastIndex - cellStartIndex;
this.spellcheckState.lastIndex = lastIndex;
this.spellcheckState.lockSpell = true;
this.spellcheckState.lastSpellInfo = e;
this.SpellCheckApi.spellCheck({
"type": "suggest",
"usrWords": [e["usrWords"][lastIndex]],
"usrLang": [e["usrLang"][lastIndex]],
"cellInfo": e["cellsInfo"][lastIndex],
"wordsIndex": e["wordsIndex"][lastIndex]
});
} else if (type === "suggest") {
this.handlers.trigger("asc_onSpellCheckVariantsFound", new AscCommon.asc_CSpellCheckProperty(e["usrWords"][0], null, e["usrSuggest"][0], null, null));
var cellInfo = e["cellInfo"];
this.spellcheckState.lockSpell = true;
if (!ws.model.selectionRange.activeCell.isEqual(cellInfo) && isStart && lastOptions) {
this.asc_replaceMisspelledWords(lastOptions);
} else {
ws.setSelection(new Asc.Range(cellInfo.col, cellInfo.row, cellInfo.col, cellInfo.row));
this.spellcheckState.lockSpell = false;
if(this.spellcheckState.afterReplace) {
History.EndTransaction();
this.spellcheckState.afterReplace = false;
}
}
this.spellcheckState.isStart = true;
this.spellcheckState.wordsIndex = e["wordsIndex"];
}
};
spreadsheet_api.prototype._spellCheckDisconnect = function () {
this.cleanSpelling();
};
spreadsheet_api.prototype._spellCheckRestart = function (word) {
var lastSpellInfo;
if ((lastSpellInfo = this.spellcheckState.lastSpellInfo)) {
var lastIndex = this.spellcheckState.lastIndex;
this.spellcheckState.lastIndex = -1;
var usrLang = [];
for (var i = lastIndex; i < lastSpellInfo["usrWords"].length; ++i) {
usrLang.push(this.defaultLanguage);
}
this.spellcheckState.lockSpell = true;
this.SpellCheckApi.spellCheck({
"type": "spell",
"usrWords": lastSpellInfo["usrWords"].slice(lastIndex),
"usrLang": usrLang,
"cellsInfo": lastSpellInfo["cellsInfo"].slice(lastIndex),
"wordsIndex": lastSpellInfo["wordsIndex"].slice(lastIndex)
});
} else {
this.cleanSpelling();
}
};
spreadsheet_api.prototype.asc_setDefaultLanguage = function (val) {
if (this.spellcheckState.lockSpell || this.defaultLanguage === val) {
return;
}
this.defaultLanguage = val;
this._spellCheckRestart();
};
spreadsheet_api.prototype.asc_nextWord = function () {
if (this.spellcheckState.lockSpell) {
return;
}
var ws = this.wb.getWorksheet();
var activeCell = ws.model.selectionRange.activeCell;
var lastSpell = this.spellcheckState.lastSpellInfo;
var cellsInfo;
if (lastSpell) {
cellsInfo = lastSpell["cellsInfo"];
var usrWords = lastSpell["usrWords"];
var usrCorrect = lastSpell["usrCorrect"];
var wordsIndex = lastSpell["wordsIndex"];
var ignoreWords = this.spellcheckState.ignoreWords;
var changeWords = this.spellcheckState.changeWords;
var lastIndex = this.spellcheckState.lastIndex;
this.spellcheckState.cellText = this.asc_getCellInfo().text;
var cellText = this.spellcheckState.newCellText || this.spellcheckState.cellText;
var afterReplace = this.spellcheckState.afterReplace;
for (var i = 0; i < usrWords.length; i++) {
var usrWord = usrWords[i];
if (ignoreWords[usrWord] || changeWords[usrWord]) {
usrCorrect[i] = true;
}
}
while (cellsInfo[lastIndex].col === activeCell.col && cellsInfo[lastIndex].row === activeCell.row) {
var letterDifference = null;
var word = usrWords[lastIndex];
var newWord = this.spellcheckState.newWord;
if (newWord) {
letterDifference = newWord.length - word.length;
} else if (changeWords[word]) {
letterDifference = changeWords[word].length - word.length;
}
if (letterDifference !== null) {
var replaceWith = newWord || changeWords[word];
var valueForSearching = new RegExp(usrWords[lastIndex], "y");
valueForSearching.lastIndex = wordsIndex[lastIndex];
cellText = cellText.replace(valueForSearching, replaceWith);
if (letterDifference !== 0) {
var j = lastIndex + 1;
while (j < usrWords.length && cellsInfo[j].col === cellsInfo[lastIndex].col) {
wordsIndex[j] += letterDifference;
j++;
}
}
this.spellcheckState.newCellText = cellText;
this.spellcheckState.newWord = null;
}
if (this.spellcheckState.newCellText) {
this.spellcheckState.cellsChange = [];
var cell = cellsInfo[lastIndex];
this.spellcheckState.cellsChange.push(new Asc.Range(cell.col, cell.row, cell.col, cell.row));
}
if (afterReplace && !usrCorrect[lastIndex]) {
afterReplace = false;
break;
}
++lastIndex;
if (!afterReplace && !usrCorrect[lastIndex]) {
afterReplace = false;
break;
}
}
this.spellcheckState.lastIndex = lastIndex;
this.SpellCheck_CallBack(this.spellcheckState.lastSpellInfo);
return;
}
var maxC = ws.model.getColsCount() - 1;
var maxR = ws.model.getRowsCount() - 1;
if (-1 === maxC || -1 === maxR) {
this.handlers.trigger("asc_onSpellCheckVariantsFound", new AscCommon.asc_CSpellCheckProperty());
return;
}
if (!this.spellcheckState.startCell) {
this.spellcheckState.startCell = activeCell.clone();
if (this.spellcheckState.startCell.col > maxC) {
this.spellcheckState.startCell.row += 1;
this.spellcheckState.startCell.col = 0;
}
if (this.spellcheckState.startCell.row > maxR) {
this.spellcheckState.startCell.row = 0;
this.spellcheckState.startCell.col = 0;
}
this.spellcheckState.currentCell = this.spellcheckState.startCell.clone();
}
var startCell = this.spellcheckState.startCell;
var currentCell = this.spellcheckState.currentCell;
var lang = this.defaultLanguage;
var langArray = [];
var wordsArray = [];
cellsInfo = [];
var wordsIndexArray = [];
var isEnd = false;
do {
if (this.spellcheckState.iteration && currentCell.row > startCell.row) {
break;
}
if (currentCell.row > maxR) {
currentCell.row = 0;
currentCell.col = 0;
this.spellcheckState.iteration = true;
}
if (this.spellcheckState.iteration && currentCell.row === startCell.row) {
maxC = startCell.col - 1;
}
if (currentCell.col > maxC) {
this.spellcheckState.nextRow();
continue;
}
ws.model.getRange3(currentCell.row, currentCell.col, currentCell.row, maxC)._foreachNoEmpty(function (cell, r, c) {
if (cell.text !== null && !cell.isFormula()) {
var cellInfo = new AscCommon.CellBase(r, c);
var wordsObject = AscCommonExcel.WordSplitting(cell.text);
var words = wordsObject.wordsArray;
var wordsIndex = wordsObject.wordsIndex;
for (var i = 0; i < words.length; ++i) {
wordsArray.push(words[i]);
wordsIndexArray.push(wordsIndex[i]);
langArray.push(lang);
cellsInfo.push(cellInfo);
}
isEnd = true;
}
});
if (isEnd) {
break;
}
this.spellcheckState.nextRow();
} while (true);
if (0 < wordsArray.length) {
this.spellcheckState.lockSpell = true;
this.SpellCheckApi.spellCheck({
"type": "spell",
"usrWords": wordsArray,
"usrLang": langArray,
"cellsInfo": cellsInfo,
"wordsIndex": wordsIndexArray
});
} else {
this.handlers.trigger("asc_onSpellCheckVariantsFound", new AscCommon.asc_CSpellCheckProperty());
var lastFindOptions = this.spellcheckState.lastFindOptions;
var cellsChange = this.spellcheckState.cellsChange;
if (cellsChange.length !== 0 && lastFindOptions) {
this.spellcheckState.lockSpell = true;
this.asc_replaceMisspelledWords(lastFindOptions);
}
this.spellcheckState.isStart = false;
}
};
spreadsheet_api.prototype.asc_replaceMisspelledWord = function(newWord, variantsFound, replaceAll) {
var options = new Asc.asc_CFindOptions();
options.isSpellCheck = true;
options.wordsIndex = this.spellcheckState.wordsIndex;
this.spellcheckState.newWord = newWord;
options.isMatchCase = true;
if (replaceAll === true) {
/*if (!this.spellcheckState.isIgnoreUppercase) {
this.spellcheckState.changeWords[variantsFound.Word] = newWord;
} else {
this.spellcheckState.changeWords[variantsFound.Word.toLowerCase()] = newWord;
}*/
this.spellcheckState.changeWords[variantsFound.Word] = newWord;
options.isReplaceAll = true;
}
this.spellcheckState.lockSpell = false;
this.spellcheckState.lastFindOptions = options;
this.asc_nextWord();
};
spreadsheet_api.prototype.asc_replaceMisspelledWords = function (options) {
var t = this;
var ws = this.wb.getWorksheet();
var cellsChange = this.spellcheckState.cellsChange;
var changeWords = this.spellcheckState.changeWords;
var cellText = this.spellcheckState.cellText;
var newCellText = this.spellcheckState.newCellText;
if (!newCellText) {
cellText = null;
newCellText = null;
}
var replaceWords = [];
options.isWholeWord = true;
for (var key in changeWords) {
replaceWords.push([AscCommonExcel.getFindRegExp(key, options), changeWords[key]]);
}
options.findWhat = cellText;
options.isMatchCase = true;
options.replaceWith = newCellText;
options.replaceWords = replaceWords;
History.Create_NewPoint();
History.StartTransaction();
ws._replaceCellsText(cellsChange, options, false, function () {
t.spellcheckState.cellsChange = [];
options.indexInArray = 0;
var lastSpell = t.spellcheckState.lastSpellInfo;
if (lastSpell) {
var lastIndex = t.spellcheckState.lastIndex;
var cellInfo = lastSpell["cellsInfo"][lastIndex];
t.spellcheckState.lockSpell = true;
ws.setSelection(new Asc.Range(cellInfo.col, cellInfo.row, cellInfo.col, cellInfo.row));
t.spellcheckState.lockSpell = false;
t.spellcheckState.newWord = null;
t.spellcheckState.newCellText = null;
t.spellcheckState.afterReplace = true;
t.spellcheckState.lastIndex = 0;
t.spellcheckState.cellText = t.asc_getCellInfo().text;
t.asc_nextWord();
return;
}
t.spellcheckState.lockSpell = false;
History.EndTransaction();
});
};
spreadsheet_api.prototype.asc_ignoreMisspelledWord = function(spellCheckProperty, ignoreAll) {
if (ignoreAll) {
var word = spellCheckProperty.Word;
this.spellcheckState.ignoreWords[word] = word;
}
this.asc_nextWord();
};
spreadsheet_api.prototype.asc_ignoreNumbers = function (isIgnore) {
this.spellcheckState.isIgnoreNumbers = isIgnore;
};
spreadsheet_api.prototype.asc_ignoreUppercase = function (isIgnore) {
this.spellcheckState.isIgnoreUppercase = isIgnore;
};
spreadsheet_api.prototype.asc_cancelSpellCheck = function () {
this.cleanSpelling();
};
spreadsheet_api.prototype.asc_getKeyboardLanguage = function () {
if (undefined !== window["asc_current_keyboard_layout"]) {
return window["asc_current_keyboard_layout"];
}
return -1;
};
spreadsheet_api.prototype.asc_getInputLanguage = function () {
let keyboardLang = this.asc_getKeyboardLanguage();
if (-1 !== keyboardLang) {
return keyboardLang;
}
let ws = this.wb && this.wb.getWorksheet();
if (ws && ws.objectRender && ws.objectRender.controller && ws.objectRender.selectedGraphicObjectsExists()) {
return ws.objectRender.controller.getInputLanguage();
}
return this.defaultLanguage;
};
// Frozen pane
spreadsheet_api.prototype.asc_freezePane = function (type, col, row) {
if (this.canEdit()) {
this.wb.getWorksheet().freezePane(type, col, row);
}
};
spreadsheet_api.prototype.asc_setSparklineGroup = function (id, oSparklineGroup) {
if (this.collaborativeEditing.getGlobalLock() || !this.canEdit()) {
return;
}
var t = this;
var changeSparkline = function (res) {
if (res) {
var changedSparkline = g_oTableId.Get_ById(id);
if (changedSparkline) {
History.Create_NewPoint();
History.StartTransaction();
changedSparkline.set(oSparklineGroup);
History.EndTransaction();
t.wb._onWSSelectionChanged();
t.wb.getWorksheet().draw();
}
}
};
this._isLockedSparkline(id, changeSparkline);
};
spreadsheet_api.prototype.asc_addSparklineGroup = function (type, sDataRange, sLocationRange) {
if (this.collaborativeEditing.getGlobalLock() || !this.canEdit()) {
return;
}
var wsView = this.wb.getWorksheet();
return wsView.addSparklineGroup(type, sDataRange, sLocationRange);
};
spreadsheet_api.prototype.asc_setListType = function (type, subtype, custom) {
var t = this;
var sNeedFont = AscFormat.fGetFontByNumInfo(type, subtype, custom);
if(typeof sNeedFont === "string" && sNeedFont.length > 0){
var t = this, fonts = {};
fonts[sNeedFont] = 1;
t._loadFonts(fonts, function() {t.asc_setListType2(type, subtype, custom);});
}
else{
t.asc_setListType2(type, subtype);
}
};
spreadsheet_api.prototype.asc_setListType2 = function (type, subtype, custom) {
var oWorksheet = this.wb.getWorksheet();
if(oWorksheet){
if(oWorksheet.isSelectOnShape){
return oWorksheet.objectRender.setListType(type, subtype, custom);
}
}
};
// Cell interface
spreadsheet_api.prototype.asc_getCellInfo = function() {
return this.wb && this.wb.getSelectionInfo();
};
// Получить координаты активной ячейки
spreadsheet_api.prototype.asc_getActiveCellCoord = function(useUpRightMerge) {
var oWorksheet = this.wb.getWorksheet();
if(oWorksheet){
if(oWorksheet.isSelectOnShape){
return oWorksheet.objectRender.getContextMenuPosition();
}
else{
return oWorksheet.getActiveCellCoord(useUpRightMerge);
}
}
};
// Получить координаты активной ячейки
spreadsheet_api.prototype.asc_getActiveCell = function() {
var oWorksheet = this.wb.getWorksheet();
if(oWorksheet){
if(oWorksheet.isSelectOnShape){
return null;
}
else{
return oWorksheet.getActiveCell();
}
}
};
// Получить координаты для каких-либо действий (для общей схемы)
spreadsheet_api.prototype.asc_getAnchorPosition = function() {
return this.asc_getActiveCellCoord();
};
// Получаем свойство: редактируем мы сейчас или нет
spreadsheet_api.prototype.asc_getCellEditMode = function() {
return this.wb ? this.wb.getCellEditMode() : false;
};
spreadsheet_api.prototype.asc_getHeaderFooterMode = function() {
return this.wb && this.wb.getCellEditMode() && this.wb.cellEditor && this.wb.cellEditor.options &&
this.wb.cellEditor.options.menuEditor;
};
spreadsheet_api.prototype.asc_getActiveRangeStr = function(referenceType, opt_getActiveCell, opt_ignore_r1c1, opt_only_range) {
let ws = this.wb.getWorksheet();
let res = null;
let tmpR1C1;
if (opt_ignore_r1c1) {
tmpR1C1 = AscCommonExcel.g_R1C1Mode;
AscCommonExcel.g_R1C1Mode = false;
}
if (ws && ws.model && ws.model.selectionRange) {
let range;
if (opt_getActiveCell) {
let activeCell = ws.model.selectionRange.activeCell;
range = new Asc.Range(activeCell.col, activeCell.row, activeCell.col, activeCell.row);
} else {
let lastRange = ws.model.selectionRange.getLast();
range = new Asc.Range(lastRange.c1, lastRange.r1, lastRange.c2, lastRange.r2);
}
if (opt_only_range && range.isOneCell()) {
return null;
}
res = range.getName(referenceType);
}
if (opt_ignore_r1c1) {
AscCommonExcel.g_R1C1Mode = tmpR1C1;
}
return res;
};
spreadsheet_api.prototype.asc_getIsTrackShape = function() {
return this.wb ? this.wb.getIsTrackShape() : false;
};
spreadsheet_api.prototype.asc_setCellFontName = function(fontName) {
var t = this, fonts = {};
fonts[fontName] = 1;
t._loadFonts(fonts, function() {
var ws = t.wb.getWorksheet();
if (ws.objectRender.selectedGraphicObjectsExists() && ws.objectRender.controller.setCellFontName) {
ws.objectRender.controller.setCellFontName(fontName);
} else {
t.wb.setFontAttributes("fn", fontName);
t.wb.restoreFocus();
}
});
};
spreadsheet_api.prototype.asc_setCellFontSize = function(fontSize) {
var ws = this.wb.getWorksheet();
if (ws.objectRender.selectedGraphicObjectsExists() && ws.objectRender.controller.setCellFontSize) {
ws.objectRender.controller.setCellFontSize(fontSize);
} else {
this.wb.setFontAttributes("fs", fontSize);
this.wb.restoreFocus();
}
};
spreadsheet_api.prototype.asc_setCellBold = function(isBold) {
if (this.collaborativeEditing.getGlobalLock() || !this.canEdit()) {
return;
}
let ws = this.wb.getWorksheet();
if (ws.objectRender.selectedGraphicObjectsExists() && ws.objectRender.controller.setCellBold) {
ws.objectRender.controller.setCellBold(isBold);
} else {
this.wb.setFontAttributes("b", isBold);
this.wb.restoreFocus();
}
};
spreadsheet_api.prototype.asc_setCellItalic = function(isItalic) {
if (this.collaborativeEditing.getGlobalLock() || !this.canEdit()) {
return;
}
let ws = this.wb.getWorksheet();
if (ws.objectRender.selectedGraphicObjectsExists() && ws.objectRender.controller.setCellItalic) {
ws.objectRender.controller.setCellItalic(isItalic);
} else {
this.wb.setFontAttributes("i", isItalic);
this.wb.restoreFocus();
}
};
spreadsheet_api.prototype.asc_setCellUnderline = function(isUnderline) {
if (this.collaborativeEditing.getGlobalLock() || !this.canEdit()) {
return;
}
let ws = this.wb.getWorksheet();
if (ws.objectRender.selectedGraphicObjectsExists() && ws.objectRender.controller.setCellUnderline) {
ws.objectRender.controller.setCellUnderline(isUnderline);
} else {
this.wb.setFontAttributes("u", isUnderline ? Asc.EUnderline.underlineSingle : Asc.EUnderline.underlineNone);
this.wb.restoreFocus();
}
};
spreadsheet_api.prototype.asc_setCellStrikeout = function(isStrikeout) {
if (this.collaborativeEditing.getGlobalLock() || !this.canEdit()) {
return;
}
let ws = this.wb.getWorksheet();
if (ws.objectRender.selectedGraphicObjectsExists() && ws.objectRender.controller.setCellStrikeout) {
ws.objectRender.controller.setCellStrikeout(isStrikeout);
} else {
this.wb.setFontAttributes("s", isStrikeout);
this.wb.restoreFocus();
}
};
spreadsheet_api.prototype.asc_setCellSubscript = function(isSubscript) {
if (this.collaborativeEditing.getGlobalLock() || !this.canEdit()) {
return;
}
let ws = this.wb.getWorksheet();
if (ws.objectRender.selectedGraphicObjectsExists() && ws.objectRender.controller.setCellSubscript) {
ws.objectRender.controller.setCellSubscript(isSubscript);
} else {
this.wb.setFontAttributes("fa", isSubscript ? AscCommon.vertalign_SubScript : null);
this.wb.restoreFocus();
}
};
spreadsheet_api.prototype.asc_setCellSuperscript = function(isSuperscript) {
if (this.collaborativeEditing.getGlobalLock() || !this.canEdit()) {
return;
}
let ws = this.wb.getWorksheet();
if (ws.objectRender.selectedGraphicObjectsExists() && ws.objectRender.controller.setCellSuperscript) {
ws.objectRender.controller.setCellSuperscript(isSuperscript);
} else {
this.wb.setFontAttributes("fa", isSuperscript ? AscCommon.vertalign_SuperScript : null);
this.wb.restoreFocus();
}
};
spreadsheet_api.prototype.asc_setCellAlign = function(align) {
if (this.collaborativeEditing.getGlobalLock() || !this.canEdit()) {
return;
}
let ws = this.wb.getWorksheet();
if (ws.objectRender.selectedGraphicObjectsExists() && ws.objectRender.controller.setCellAlign) {
ws.objectRender.controller.setCellAlign(align);
} else {
this.wb.getWorksheet().setSelectionInfo("a", align);
this.wb.restoreFocus();
}
};
spreadsheet_api.prototype.asc_setCellVertAlign = function(align) {
if (this.collaborativeEditing.getGlobalLock() || !this.canEdit()) {
return;
}
let ws = this.wb.getWorksheet();
if (ws.objectRender.selectedGraphicObjectsExists() && ws.objectRender.controller.setCellVertAlign) {
ws.objectRender.controller.setCellVertAlign(align);
} else {
this.wb.getWorksheet().setSelectionInfo("va", align);
this.wb.restoreFocus();
}
};
spreadsheet_api.prototype.asc_setCellTextWrap = function(isWrapped) {
var ws = this.wb.getWorksheet();
if (ws.objectRender.selectedGraphicObjectsExists() && ws.objectRender.controller.setCellTextWrap) {
ws.objectRender.controller.setCellTextWrap(isWrapped);
} else {
this.wb.getWorksheet().setSelectionInfo("wrap", isWrapped);
this.wb.restoreFocus();
}
};
spreadsheet_api.prototype.asc_setCellTextShrink = function(isShrinked) {
var ws = this.wb.getWorksheet();
if (ws.objectRender.selectedGraphicObjectsExists() && ws.objectRender.controller.setCellTextShrink) {
ws.objectRender.controller.setCellTextShrink(isShrinked);
} else {
this.wb.getWorksheet().setSelectionInfo("shrink", isShrinked);
this.wb.restoreFocus();
}
};
spreadsheet_api.prototype.asc_setCellTextColor = function(color) {
var ws = this.wb.getWorksheet();
if (ws.objectRender.selectedGraphicObjectsExists() && ws.objectRender.controller.setCellTextColor) {
ws.objectRender.controller.setCellTextColor(color);
} else {
if (color instanceof Asc.asc_CColor) {
color = AscCommonExcel.CorrectAscColor(color);
this.wb.setFontAttributes("c", color);
this.wb.restoreFocus();
}
}
};
spreadsheet_api.prototype.asc_setCellFill = function (fill) {
var ws = this.wb.getWorksheet();
if (ws.objectRender.selectedGraphicObjectsExists() && ws.objectRender.controller.setCellBackgroundColor) {
ws.objectRender.controller.setCellBackgroundColor(fill);
} else {
this.wb.getWorksheet().setSelectionInfo("f", fill);
this.wb.restoreFocus();
}
};
spreadsheet_api.prototype.asc_setCellBackgroundColor = function(color) {
var ws = this.wb.getWorksheet();
if (ws.objectRender.selectedGraphicObjectsExists() && ws.objectRender.controller.setCellBackgroundColor) {
ws.objectRender.controller.setCellBackgroundColor(color);
} else {
if (color instanceof Asc.asc_CColor || null == color) {
if (null != color) {
color = AscCommonExcel.CorrectAscColor(color);
}
this.wb.getWorksheet().setSelectionInfo("bc", color);
this.wb.restoreFocus();
}
}
};
spreadsheet_api.prototype.asc_setCellBorders = function(borders) {
this.wb.getWorksheet().setSelectionInfo("border", borders);
this.wb.restoreFocus();
};
spreadsheet_api.prototype.asc_setCellFormat = function(format) {
var t = this;
//todo split setCellFormat into set->_loadFonts->draw and remove checkCultureInfoFontPicker(checkCultureInfoFontPicker is called inside StyleManager.setNum)
var numFormat = AscCommon.oNumFormatCache.get(format);
numFormat.checkCultureInfoFontPicker();
this._loadFonts([], function () {
t.wb.setCellFormat(format);
t.wb.restoreFocus();
});
};
spreadsheet_api.prototype.asc_setCellAngle = function(angle) {
if (this.collaborativeEditing.getGlobalLock() || !this.canEdit()) {
return;
}
if (this.wb) {
var ws = this.wb.getWorksheet();
if (ws) {
if (ws.objectRender && ws.objectRender.selectedGraphicObjectsExists() && ws.objectRender.controller.setCellAngle) {
ws.objectRender.controller.setCellAngle(angle);
} else {
ws.setSelectionInfo("angle", angle);
this.wb.restoreFocus();
}
}
}
};
spreadsheet_api.prototype.asc_setCellStyle = function(name) {
this.wb.getWorksheet().setSelectionInfo("style", name);
this.wb.restoreFocus();
};
spreadsheet_api.prototype.asc_ChangeTextCase = function(nType) {
if (this.collaborativeEditing.getGlobalLock() || !this.canEdit()) {
return;
}
if (this.wb) {
var ws = this.wb && this.wb.getWorksheet();
if (ws && ws.objectRender && ws.objectRender.selectedGraphicObjectsExists()) {
ws.objectRender.controller.changeTextCase(nType);
} else {
this.wb.changeTextCase(nType);
this.wb.restoreFocus();
}
}
};
spreadsheet_api.prototype.asc_increaseCellDigitNumbers = function() {
this.wb.getWorksheet().setSelectionInfo("changeDigNum", +1);
this.wb.restoreFocus();
};
spreadsheet_api.prototype.asc_decreaseCellDigitNumbers = function() {
this.wb.getWorksheet().setSelectionInfo("changeDigNum", -1);
this.wb.restoreFocus();
};
// Увеличение размера шрифта
spreadsheet_api.prototype.asc_increaseFontSize = function() {
var ws = this.wb.getWorksheet();
if (ws.objectRender.selectedGraphicObjectsExists() && ws.objectRender.controller.increaseFontSize) {
ws.objectRender.controller.increaseFontSize();
} else {
this.wb.changeFontSize("changeFontSize", true);
this.wb.restoreFocus();
}
};
// Уменьшение размера шрифта
spreadsheet_api.prototype.asc_decreaseFontSize = function() {
var ws = this.wb.getWorksheet();
if (ws.objectRender.selectedGraphicObjectsExists() && ws.objectRender.controller.decreaseFontSize) {
ws.objectRender.controller.decreaseFontSize();
} else {
this.wb.changeFontSize("changeFontSize", false);
this.wb.restoreFocus();
}
};
spreadsheet_api.prototype.asc_setCellIndent = function(val) {
this.wb.getWorksheet().setSelectionInfo("indent", val);
this.wb.restoreFocus();
};
spreadsheet_api.prototype.asc_setCellProtection = function (val) {
this.wb.getWorksheet().setSelectionInfo("applyProtection", val);
this.wb.restoreFocus();
};
spreadsheet_api.prototype.asc_setCellLocked = function (val) {
this.wb.getWorksheet().setSelectionInfo("locked", val);
this.wb.restoreFocus();
};
spreadsheet_api.prototype.asc_setCellHiddenFormulas = function (val) {
this.wb.getWorksheet().setSelectionInfo("hiddenFormulas", val);
this.wb.restoreFocus();
};
spreadsheet_api.prototype.asc_checkProtectedRange = function () {
var ws = this.wbModel.getActiveWs();
/*if (!ws.isLockedActiveCell()) {
return false;
}*/
var protectedRanges = ws.getProtectedRangesByActiveRange();
//входит ли в зону защищенных диапазонов ячейка - null(не входит)/true(входит и защищена паролем)/false(входит и не защищена паролем или была защищена и уже не защищена)
var res = null;
if (protectedRanges) {
for (var i = 0; i < protectedRanges.length; i++) {
if (protectedRanges[i].asc_isPassword()) {
if (protectedRanges[i].isUserEnteredPassword()) {
return false;
} else if (res !== false) {
res = true;
}
} else {
return false;
}
}
}
return res;
};
spreadsheet_api.prototype.asc_checkLockedCells = function () {
var ws = this.wbModel.getActiveWs();
var res = null;
if (ws) {
var _selection = ws.getSelection();
if (_selection && _selection.ranges) {
res = ws.isIntersectLockedRanges(_selection.ranges);
}
}
return res;
};
spreadsheet_api.prototype.asc_checkActiveCellPassword = function (val, callback) {
var ws = this.wbModel.getActiveWs();
var activeCell = ws && ws.selectionRange && ws.selectionRange.activeCell;
if (activeCell) {
ws.checkProtectedRangesPassword(val, activeCell, callback);
}
};
// Формат по образцу
spreadsheet_api.prototype.asc_formatPainter = function(formatPainterState) {
this.changeFormatPainterState(formatPainterState, undefined);
};
spreadsheet_api.prototype.changeFormatPainterState = function(formatPainterState, bLockDraw) {
if (this.isStartAddShape) {
this.asc_endAddShape();
}
this.stopInkDrawer();
this.cancelEyedropper();
this.formatPainter.putState(formatPainterState);
if (this.wb) {
this.wb.formatPainter(formatPainterState, bLockDraw);
}
};
spreadsheet_api.prototype.retrieveFormatPainterData = function()
{
let oWSView = this.wb.getWorksheet();
if(!oWSView || !oWSView.model) {
return null;
}
return new AscCommonExcel.CCellFormatPasteData(oWSView);
};
spreadsheet_api.prototype.asc_showAutoComplete = function() {
this.wb.showAutoComplete();
};
spreadsheet_api.prototype.asc_onMouseUp = function(event, x, y) {
if (this.wb) {
this.wb._onWindowMouseUpExternal(event, x, y);
}
};
//
spreadsheet_api.prototype.asc_selectFunction = function() {
};
spreadsheet_api.prototype.asc_insertHyperlink = function (options) {
AscFonts.FontPickerByCharacter.checkText(options.text, this, function () {
this.wb.insertHyperlink(options);
});
};
spreadsheet_api.prototype.asc_removeHyperlink = function() {
this.wb.removeHyperlink();
};
spreadsheet_api.prototype.asc_getFullHyperlinkLength = function(str) {
return window["AscCommonExcel"].getFullHyperlinkLength(str);
};
spreadsheet_api.prototype.asc_cleanSelectRange = function () {
this.wb._onCleanSelectRange();
};
spreadsheet_api.prototype.asc_insertInCell = function(functionName, type, autoComplete) {
this.wb.insertInCellEditor(functionName, type, autoComplete);
this.wb.restoreFocus();
};
spreadsheet_api.prototype.asc_startWizard = function (name, doCleanCellContent) {
this.wb.startWizard(name, doCleanCellContent);
this.wb.restoreFocus();
};
spreadsheet_api.prototype.asc_canEnterWizardRange = function(char) {
return this.wb.canEnterWizardRange(char);
};
spreadsheet_api.prototype.asc_insertArgumentsInFormula = function(val, argNum, argType, name, bEndInsertArg) {
var res = this.wb.insertArgumentsInFormula(val, argNum, argType, name, bEndInsertArg);
this.wb.restoreFocus();
return res;
};
spreadsheet_api.prototype.asc_getFormulasInfo = function() {
return this.formulasList;
};
spreadsheet_api.prototype.asc_getFormulaLocaleName = function(name) {
return AscCommonExcel.cFormulaFunctionToLocale ? AscCommonExcel.cFormulaFunctionToLocale[name] : name;
};
spreadsheet_api.prototype.asc_getFormulaNameByLocale = function (name) {
var f = AscCommonExcel.cFormulaFunctionLocalized && AscCommonExcel.cFormulaFunctionLocalized[name];
return f ? f.prototype.name : name;
};
spreadsheet_api.prototype.asc_calculate = function(type) {
if (this.canEdit()) {
this.wb.calculate(type);
}
};
spreadsheet_api.prototype.asc_setFontRenderingMode = function(mode) {
if (mode !== this.fontRenderingMode) {
this.fontRenderingMode = mode;
if (this.wb) {
this.wb.setFontRenderingMode(mode, /*isInit*/false);
}
}
};
/**
* Режим выбора диапазона
* @param {Asc.c_oAscSelectionDialogType} selectionDialogType
* @param selectRange
*/
spreadsheet_api.prototype.asc_setSelectionDialogMode = function(selectionDialogType, selectRange) {
if (this.wb) {
this.wb._onStopFormatPainter();
this.wb.setSelectionDialogMode(selectionDialogType, selectRange);
}
};
spreadsheet_api.prototype.asc_SendThemeColors = function(colors, standart_colors) {
this._gui_control_colors = { Colors: colors, StandartColors: standart_colors };
var ret = this.handlers.trigger("asc_onSendThemeColors", colors, standart_colors);
if (false !== ret) {
this._gui_control_colors = null;
}
};
spreadsheet_api.prototype.getCurrentTheme = function()
{
return this.wbModel && this.wbModel.theme;
};
spreadsheet_api.prototype.getGraphicController = function () {
var ws = this.wb && this.wb.getWorksheet();
return ws && ws.objectRender && ws.objectRender.controller;
};
spreadsheet_api.prototype.asc_ChangeColorScheme = function (sSchemeName) {
if (this.wbModel) {
for (var i = 0; i < this.wbModel.aWorksheets.length; ++i) {
var sheet = this.wbModel.aWorksheets[i];
if (sheet.getSheetProtection()) {
//TODO error
return;
}
}
}
var t = this;
var onChangeColorScheme = function (res) {
if (res) {
if (t.wbModel.changeColorScheme(sSchemeName)) {
t.asc_AfterChangeColorScheme();
}
}
};
// ToDo поправить заглушку, сделать новый тип lock element-а
var sheetId = -1; // Делаем не существующий лист и не существующий объект
var lockInfo = this.collaborativeEditing.getLockInfo(c_oAscLockTypeElem.Object, /*subType*/null, sheetId,
sheetId);
this.collaborativeEditing.lock([lockInfo], onChangeColorScheme);
};
spreadsheet_api.prototype.asc_ChangeColorSchemeByIdx = function (nIdx) {
if (this.collaborativeEditing.getGlobalLock() || !this.canEdit()) {
return;
}
if (this.wbModel) {
for (var i = 0; i < this.wbModel.aWorksheets.length; ++i) {
var sheet = this.wbModel.aWorksheets[i];
if (sheet.getSheetProtection()) {
//TODO error
return;
}
}
}
var t = this;
var onChangeColorScheme = function (res) {
if (res) {
if (t.wbModel.changeColorSchemeByIdx(nIdx)) {
t.asc_AfterChangeColorScheme();
}
}
};
// ToDo поправить заглушку, сделать новый тип lock element-а
var sheetId = -1; // Делаем не существующий лист и не существующий объект
var lockInfo = this.collaborativeEditing.getLockInfo(c_oAscLockTypeElem.Object, /*subType*/null, sheetId,
sheetId);
this.collaborativeEditing.lock([lockInfo], onChangeColorScheme);
};
spreadsheet_api.prototype.asc_AfterChangeColorScheme = function() {
this.asc_CheckGuiControlColors();
this.asc_ApplyColorScheme(true);
};
spreadsheet_api.prototype.asc_ApplyColorScheme = function(bRedraw) {
if (window['IS_NATIVE_EDITOR'] || !window["NATIVE_EDITOR_ENJINE"]) {
Asc["editor"].wb.recalculateDrawingObjects();
this.chartPreviewManager.clearPreviews();
this.textArtPreviewManager.clear();
}
// На view-режиме не нужно отправлять стили
if (!this.getViewMode()) {
// Отправка стилей
this._sendWorkbookStyles();
}
if (bRedraw) {
this.handlers.trigger("asc_onUpdateChartStyles");
this.handlers.trigger("asc_onSelectionChanged", this.asc_getCellInfo());
this.wb.drawWS();
}
};
/////////////////////////////////////////////////////////////////////////
////////////////////////////AutoSave api/////////////////////////////////
/////////////////////////////////////////////////////////////////////////
spreadsheet_api.prototype._autoSaveInner = function () {
if (this.asc_getCellEditMode() || this.asc_getIsTrackShape()) {
return;
}
if (this.CollaborativeEditing.Is_Fast() && !this.CollaborativeEditing.Is_SingleUser()) {
this.wb.Continue_FastCollaborativeEditing();
} else if (this.isLiveViewer()) {
if (this.collaborativeEditing.haveOtherChanges()) {
this.collaborativeEditing.applyChanges();
}
return;
} else if (!History.Have_Changes(true) && !(this.collaborativeEditing.getCollaborativeEditing() &&
0 !== this.collaborativeEditing.getOwnLocksLength())) {
if (this.collaborativeEditing.getFast() && this.collaborativeEditing.haveOtherChanges()) {
AscCommon.CollaborativeEditing.Clear_CollaborativeMarks();
// Принимаем чужие изменения
this.collaborativeEditing.applyChanges();
// Пересылаем свои изменения (просто стираем чужие lock-и, т.к. своих изменений нет)
this.collaborativeEditing.sendChanges();
// Шлем update для toolbar-а, т.к. когда select в lock ячейке нужно заблокировать toolbar
this.wb._onWSSelectionChanged();
}
if (AscCommon.CollaborativeEditing.Is_Fast() /*&& !AscCommon.CollaborativeEditing.Is_SingleUser()*/) {
this.wb.sendCursor();
}
return;
}
if (null === this.lastSaveTime) {
this.lastSaveTime = new Date();
return;
}
var _bIsWaitScheme = false;
var _curTime = new Date();
if((this.collaborativeEditing.Is_SingleUser() || !this.collaborativeEditing.getFast()) && History.Points[History.Index]) {
if ((_curTime - History.Points[History.Index].Time) < this.intervalWaitAutoSave) {
_bIsWaitScheme = true;
}
}
if(!_bIsWaitScheme) {
var saveGap = this.collaborativeEditing.getFast() ? this.autoSaveGapRealTime :
(this.collaborativeEditing.getCollaborativeEditing() ? this.autoSaveGapSlow : this.autoSaveGapFast);
var gap = _curTime - this.lastSaveTime - saveGap;
if (0 <= gap) {
this.asc_Save(true);
}
if (AscCommon.CollaborativeEditing.Is_Fast() /*&& !AscCommon.CollaborativeEditing.Is_SingleUser()*/) {
this.wb.sendCursor();
}
}
};
spreadsheet_api.prototype._onUpdateDocumentCanSave = function () {
// Можно модифицировать это условие на более быстрое (менять самим состояние в аргументах, а не запрашивать каждый раз)
var tmp = History.Have_Changes() || (this.collaborativeEditing.getCollaborativeEditing() &&
0 !== this.collaborativeEditing.getOwnLocksLength()) || this.asc_getCellEditMode();
if (tmp !== this.isDocumentCanSave) {
this.isDocumentCanSave = tmp;
this.handlers.trigger('asc_onDocumentCanSaveChanged', this.isDocumentCanSave);
}
};
spreadsheet_api.prototype._onUpdateDocumentCanUndoRedo = function () {
AscCommon.History && AscCommon.History._sendCanUndoRedo();
};
spreadsheet_api.prototype._onCheckCommentRemoveLock = function(lockElem) {
var res = false;
var sheetId = lockElem["sheetId"];
if (-1 !== sheetId && 0 === sheetId.indexOf(AscCommonExcel.CCellCommentator.sStartCommentId)) {
// Коммментарий
res = true;
this.handlers.trigger("asc_onUnLockComment", lockElem["rangeOrObjectId"]);
}
return res;
};
spreadsheet_api.prototype.SetDocumentModified = spreadsheet_api.prototype.onUpdateDocumentModified = function(bIsModified) {
// Обновляем только после окончания сохранения
if (this.canSave) {
this.handlers.trigger("asc_onDocumentModifiedChanged", bIsModified);
this._onUpdateDocumentCanSave();
if (undefined !== window["AscDesktopEditor"]) {
window["AscDesktopEditor"]["onDocumentModifiedChanged"](bIsModified);
}
}
};
// Выставление локали
spreadsheet_api.prototype.asc_setLocalization = function (oLocalizedData, sLang) {
if (!this.isLoadFullApi) {
this.tmpLocalization = oLocalizedData;
return;
}
if (this.activeLocalization === sLang) {
return;
}
this.activeLocalization = sLang;
if (null == oLocalizedData) {
AscCommonExcel.cFormulaFunctionLocalized = null;
AscCommonExcel.cFormulaFunctionToLocale = null;
} else {
AscCommonExcel.cFormulaFunctionLocalized = {};
AscCommonExcel.cFormulaFunctionToLocale = {};
var localName;
for (var i in AscCommonExcel.cFormulaFunction) {
localName = oLocalizedData[i] ? oLocalizedData[i] : null;
localName = localName ? localName : i;
if (this.wb && this.wb.customFunctionEngine && this.wb.customFunctionEngine.getFunc(i)) {
localName = this.wb.customFunctionEngine.getTranslationName(i, sLang);
if (oLocalizedData[localName]) {
continue;
}
}
AscCommonExcel.cFormulaFunctionLocalized[localName] = AscCommonExcel.cFormulaFunction[i];
AscCommonExcel.cFormulaFunctionToLocale[i] = localName;
}
}
if (this.wb) {
if (!this.wb.customFunctionEngine) {
this.wb.initCustomEngine();
}
this.wb.customFunctionEngine.setActiveLocale(sLang);
}
AscCommon.build_local_rx(oLocalizedData ? oLocalizedData["LocalFormulaOperands"] : null);
if (this.wb) {
this.wb.initFormulasList();
this.wb._onWSSelectionChanged();
}
if (this.wbModel) {
this.wbModel.rebuildColors();
}
//on change formula language need load fonts
const constError = oLocalizedData && oLocalizedData["LocalFormulaOperands"] && oLocalizedData["LocalFormulaOperands"]["CONST_ERROR"];
if (constError && constError["nil"]) {
if (AscFonts.FontPickerByCharacter.getFontsByString(constError["nil"])) {
this._loadFonts([], function() {});
}
}
//update
if (this.wb && this.wb.wsViews) {
let allRange = new Asc.Range(0, 0, AscCommon.gc_nMaxCol0, AscCommon.gc_nMaxRow0);
for (let i in this.wb.wsViews) {
let item = this.wb.wsViews[i];
item._updateRange(allRange);
}
let ws = this.wb.getWorksheet();
ws && ws.draw();
}
};
spreadsheet_api.prototype.asc_nativeOpenFile = function(base64File, version, isUser, xlsxPath) {
var t = this;
asc["editor"] = this;
this.SpellCheckUrl = '';
if (undefined == isUser) {
this.User = new AscCommon.asc_CUser();
this.User.setId("TM");
this.User.setUserName("native");
}
if (undefined !== version) {
AscCommon.CurFileVersion = version;
}
let xlsxData;
this.isOpenOOXInBrowser = this["asc_isSupportFeature"]("ooxml") && AscCommon.checkOOXMLSignature(base64File);
if (this.isOpenOOXInBrowser) {
//slice because array contains garbage after end of function
this.openOOXInBrowserZip = base64File.slice();
} else if (xlsxPath && window["native"]["GetFileBinary"]) {
xlsxData = xlsxPath && window["native"]["GetFileBinary"] && window["native"]["GetFileBinary"](xlsxPath);
}
this._openDocument(base64File);
if (this.openDocumentFromZip(t.wbModel, xlsxData)) {
Asc.ReadDefTableStyles(t.wbModel);
g_oIdCounter.Set_Load(false);
AscCommon.checkCultureInfoFontPicker();
AscCommonExcel.checkStylesNames(t.wbModel.CellStyles);
t._coAuthoringInit();
t.wb = new AscCommonExcel.WorkbookView(t.wbModel, t.controller, t.handlers, window["_null_object"], window["_null_object"], t, t.collaborativeEditing, t.fontRenderingMode);
}
};
spreadsheet_api.prototype.asc_nativeCalculateFile = function() {
window['DoctRendererMode'] = true;
this.wb._nativeCalculate();
};
spreadsheet_api.prototype.asc_nativeApplyChanges = function(changes) {
for (var i = 0, l = changes.length; i < l; ++i) {
this.CoAuthoringApi.onSaveChanges(changes[i], null, true);
}
this.collaborativeEditing.applyChanges();
};
spreadsheet_api.prototype.asc_nativeApplyChanges2 = function(data, isFull) {
if (null != this.wbModel) {
this.oRedoObjectParamNative = this.wbModel.DeserializeHistoryNative(this.oRedoObjectParamNative, data, isFull);
}
if (isFull) {
this._onUpdateAfterApplyChanges();
if (window["NATIVE_EDITOR_ENJINE"] === true && window["native"]["AddImageInChanges"] && window["NATIVE_EDITOR_ENJINE_NEW_IMAGES"])
{
var _new_images = window["NATIVE_EDITOR_ENJINE_NEW_IMAGES"];
var _new_images_len = _new_images.length;
for (var nImage = 0; nImage < _new_images_len; nImage++)
window["native"]["AddImageInChanges"](_new_images[nImage]);
}
}
};
spreadsheet_api.prototype._coAuthoringSetChanges = function(e, oColor)
{
var Count = e.length;
for (var Index = 0; Index < Count; ++Index) {
this.CoAuthoringApi.onSaveChanges(e[Index], null, true);
}
this.collaborativeEditing.applyChanges(oColor);
//this._onUpdateAfterApplyChanges();
};
spreadsheet_api.prototype.asc_nativeGetFile = function() {
var oBinaryFileWriter = new AscCommonExcel.BinaryFileWriter(this.wbModel);
return oBinaryFileWriter.Write();
};
spreadsheet_api.prototype.asc_nativeGetFile3 = function()
{
var oBinaryFileWriter = new AscCommonExcel.BinaryFileWriter(this.wbModel);
oBinaryFileWriter.Write(true, true);
return { data: oBinaryFileWriter.Write(true, true), header: oBinaryFileWriter.WriteFileHeader(oBinaryFileWriter.Memory.GetCurPosition(), Asc.c_nVersionNoBase64) };
};
spreadsheet_api.prototype.asc_nativeGetFileData = function() {
//calc to fix case where file has formulas with no cache values and no changes
this.wbModel.dependencyFormulas.calcTree();
if (this.isOpenOOXInBrowser && this["asc_isSupportFeature"]("ooxml")) {
let res;
this.saveLogicDocumentToZip(undefined, undefined, function(data) {
res = data;
});
if (res) {
window["native"]["Save_End"](";v10;", res.length);
return res;
}
return new Uint8Array(0);
} else {
var oBinaryFileWriter = new AscCommonExcel.BinaryFileWriter(this.wbModel);
oBinaryFileWriter.Write(true);
var _header = oBinaryFileWriter.WriteFileHeader(oBinaryFileWriter.Memory.GetCurPosition(), Asc.c_nVersionNoBase64);
window["native"]["Save_End"](_header, oBinaryFileWriter.Memory.GetCurPosition());
return oBinaryFileWriter.Memory.data;
}
};
spreadsheet_api.prototype.asc_nativeCalculate = function() {
};
spreadsheet_api.prototype.getPrintOptionsJson = function() {
var res = {};
//отдельного флага для дополнительных настроек не делаю, общие опции тоже читаются, но пока не сделан мерж опций - верхние настройки перекроют внутренниие(если они заданы)
res["spreadsheetLayout"] = {};
res["spreadsheetLayout"]["ignorePrintArea"] = false;
res["spreadsheetLayout"]["sheetsProps"] = this.wbModel && this.wbModel.getPrintOptionsJson();
return res;
};
spreadsheet_api.prototype.asc_nativePrint = function (_printer, _page, _options) {
//calc to fix case where file has formulas with no cache values and no changes
this.wbModel.dependencyFormulas.calcTree();
var _adjustPrint = (window.AscDesktopEditor_PrintOptions && window.AscDesktopEditor_PrintOptions.advancedOptions) || new Asc.asc_CAdjustPrint();
window.AscDesktopEditor_PrintOptions = undefined;
var pageSetup;
var countWorksheets = this.wbModel.getWorksheetCount();
var t = this;
if(_options) {
//печатаем только 1 страницу первой книги
var isOnlyFirstPage = _options["printOptions"] && _options["printOptions"]["onlyFirstPage"];
if(isOnlyFirstPage) {
_adjustPrint.isOnlyFirstPage = true;
}
var spreadsheetLayout = _options["spreadsheetLayout"];
var _ignorePrintArea = spreadsheetLayout && (true === spreadsheetLayout["ignorePrintArea"] || false === spreadsheetLayout["ignorePrintArea"])? spreadsheetLayout["ignorePrintArea"] : null;
if(null !== _ignorePrintArea) {
_adjustPrint.asc_setIgnorePrintArea(_ignorePrintArea);
} else {
_adjustPrint.asc_setIgnorePrintArea(true);
}
if (_options["adjustOptions"])
{
if (_options["adjustOptions"]["startPageIndex"])
_adjustPrint.asc_setStartPageIndex(_options["adjustOptions"]["startPageIndex"]);
if (_options["adjustOptions"]["endPageIndex"])
_adjustPrint.asc_setEndPageIndex(_options["adjustOptions"]["endPageIndex"]);
if (_options["adjustOptions"]["activeSheetsArray"])
_adjustPrint.asc_setActiveSheetsArray(_options["adjustOptions"]["activeSheetsArray"]);
}
_adjustPrint.asc_setPrintType(Asc.c_oAscPrintType.EntireWorkbook);
var ws, newPrintOptions;
var _orientation = spreadsheetLayout ? spreadsheetLayout["orientation"] : null;
if(_orientation === "portrait") {
_orientation = Asc.c_oAscPageOrientation.PagePortrait;
} else if(_orientation === "landscape") {
_orientation = Asc.c_oAscPageOrientation.PageLandscape;
} else {
_orientation = null;
}
//need number
var _fitToWidth = spreadsheetLayout && AscCommon.isNumber( spreadsheetLayout["fitToWidth"]) ? spreadsheetLayout["fitToWidth"] : null;
var _fitToHeight = spreadsheetLayout && AscCommon.isNumber( spreadsheetLayout["fitToHeight"]) ? spreadsheetLayout["fitToHeight"] : null;
var _scale = spreadsheetLayout && AscCommon.isNumber( spreadsheetLayout["scale"]) ? spreadsheetLayout["scale"] : null;
//need true/false
var _headings = spreadsheetLayout && (true === spreadsheetLayout["headings"] || false === spreadsheetLayout["headings"])? spreadsheetLayout["headings"] : null;
var _gridLines = spreadsheetLayout && (true === spreadsheetLayout["gridLines"] || false === spreadsheetLayout["gridLines"])? spreadsheetLayout["gridLines"] : null;
//convert to mm
var _pageSize = spreadsheetLayout ? spreadsheetLayout["pageSize"] : null;
if(_pageSize) {
var width = AscCommon.valueToMm(_pageSize["width"]);
var height = AscCommon.valueToMm(_pageSize["height"]);
_pageSize = null !== width && null !== height ? {width: width, height: height} : null;
}
var _margins = spreadsheetLayout ? spreadsheetLayout["margins"] : null;
if(_margins) {
var left = AscCommon.valueToMm(_margins["left"]);
var right = AscCommon.valueToMm(_margins["right"]);
var top = AscCommon.valueToMm(_margins["top"]);
var bottom = AscCommon.valueToMm(_margins["bottom"]);
_margins = null !== left && null !== right && null !== top && null !== bottom ? {left: left, right: right, top: top, bottom: bottom} : null;
}
for (var index = 0; index < this.wbModel.getWorksheetCount(); ++index) {
ws = this.wbModel.getWorksheet(index);
if (spreadsheetLayout && spreadsheetLayout["sheetsProps"] && spreadsheetLayout["sheetsProps"][index]) {
newPrintOptions = new Asc.asc_CPageOptions();
newPrintOptions.setJson(spreadsheetLayout["sheetsProps"][index]);
} else {
newPrintOptions = ws.PagePrintOptions.clone();
}
//regionalSettings ?
var _pageSetup = newPrintOptions.pageSetup;
if (null !== _orientation) {
_pageSetup.orientation = _orientation;
}
if (_fitToWidth || _fitToHeight) {
_pageSetup.fitToWidth = _fitToWidth;
_pageSetup.fitToHeight = _fitToHeight;
} else if (_scale) {
_pageSetup.scale = _scale;
_pageSetup.fitToWidth = 0;
_pageSetup.fitToHeight = 0;
}
if (null !== _headings) {
newPrintOptions.headings = _headings;
}
if (null !== _gridLines) {
newPrintOptions.gridLines = _gridLines;
}
if (_pageSize) {
_pageSetup.width = _pageSize.width;
_pageSetup.height = _pageSize.height;
}
var pageMargins = newPrintOptions.pageMargins;
if (_margins) {
pageMargins.left = _margins.left;
pageMargins.right = _margins.right;
pageMargins.top = _margins.top;
pageMargins.bottom = _margins.bottom;
}
if (!_adjustPrint.pageOptionsMap) {
_adjustPrint.pageOptionsMap = [];
}
_adjustPrint.pageOptionsMap[index] = newPrintOptions;
}
}
this.wb.setPrintOptionsJson(_options);
var _printPagesData = this.wb.calcPagesPrint(_adjustPrint);
if (undefined === _printer && _page === undefined) {
// ПУСТОЙ вызов, так как он должен быть ДО команд печати (картинки). А реальзый вызов - после (pagescount)
window["AscDesktopEditor"] && window["AscDesktopEditor"]["Print_Start"]();
this.wb.executeWithoutPreview(function () {
_printer = t.wb.printSheets(_printPagesData, null, _adjustPrint).DocumentRenderer;
});
if (undefined !== window["AscDesktopEditor"]) {
var pagescount = _printer.m_lPagesCount;
window["AscDesktopEditor"]["Print_Start"](this.documentId + "/", pagescount, "", -1);
for (var i = 0; i < pagescount; i++) {
var _start = _printer.m_arrayPages[i].StartOffset;
var _end = _printer.Memory.pos;
if (i != (pagescount - 1)) {
_end = _printer.m_arrayPages[i + 1].StartOffset;
}
window["AscDesktopEditor"]["Print_Page"](
_printer.Memory.GetBase64Memory2(_start, _end - _start),
_printer.m_arrayPages[i].Width, _printer.m_arrayPages[i].Height);
}
// detect fit flag
var paramEnd = 0;
if (_adjustPrint && _adjustPrint.asc_getPrintType() == Asc.c_oAscPrintType.EntireWorkbook) {
for (var j = 0; j < countWorksheets; ++j) {
if (_adjustPrint && _adjustPrint.pageOptionsMap && _adjustPrint.pageOptionsMap[j]) {
pageSetup = _adjustPrint.pageOptionsMap[j].pageSetup;
} else {
pageSetup = this.wbModel.getWorksheet(j).PagePrintOptions.asc_getPageSetup();
}
if (pageSetup.asc_getFitToWidth() || pageSetup.asc_getFitToHeight())
paramEnd |= 1;
}
}
if (_adjustPrint && _adjustPrint.asc_getPrintType() == Asc.c_oAscPrintType.ActiveSheets) {
var activeSheet = this.wbModel.getActive();
if (_adjustPrint && _adjustPrint.pageOptionsMap && _adjustPrint.pageOptionsMap[activeSheet]) {
pageSetup = _adjustPrint.pageOptionsMap[activeSheet].pageSetup;
} else {
pageSetup = this.wbModel.getWorksheet(activeSheet).PagePrintOptions.asc_getPageSetup();
}
if (pageSetup.asc_getFitToWidth() || pageSetup.asc_getFitToHeight())
paramEnd |= 1;
}
window["AscDesktopEditor"]["Print_End"](paramEnd);
}
} else {
this.wb.printSheets(_printPagesData, _printer, _adjustPrint);
}
this.wb.setPrintOptionsJson(null);
return _printer.Memory;
};
spreadsheet_api.prototype.asc_nativePrintPagesCount = function() {
return 1;
};
spreadsheet_api.prototype.asc_nativeGetPDF = function(options) {
if (options && options["watermark"])
{
this.watermarkDraw = new AscCommon.CWatermarkOnDraw(options["watermark"], this);
this.watermarkDraw.generateNative();
}
else
{
this.watermarkDraw = null;
}
var _ret = this.asc_nativePrint(undefined, undefined, options);
window["native"]["Save_End"]("", _ret.GetCurPosition());
return _ret.data;
};
spreadsheet_api.prototype.asc_canPaste = function () {
History.Create_NewPoint();
History.StartTransaction();
return true;
};
spreadsheet_api.prototype.asc_endPaste = function (checkLockLastAction) {
History.EndTransaction(checkLockLastAction);
};
spreadsheet_api.prototype.asc_Recalculate = function () {
History.EndTransaction();
var ws = this.wbModel.getActiveWs();
this.wbModel.handlers.trigger('showWorksheet', ws.getId());
//в _onUpdateAfterApplyChanges нет очистки кэша, добавляю -
var lastPointIndex = History.Points && History.Points.length - 1;
var lastPoint = History.Points[lastPointIndex];
if (lastPoint && lastPoint.UpdateRigions) {
for (var i in lastPoint.UpdateRigions) {
this.wb.handlers.trigger("cleanCellCache", i, [lastPoint.UpdateRigions[i]], null, true);
}
}
this._onUpdateAfterApplyChanges();
};
spreadsheet_api.prototype.canRunBuilderScript = function() {
return this.asc_canPaste();
};
spreadsheet_api.prototype._onEndBuilderScript = function(callback) {
let needDraw = null;
if (this.wb && this.wb.customFunctionEngine && this.wb.customFunctionEngine.needRecalculate) {
if (this.wbModel.addCustomFunctionToChanged()) {
needDraw = true;
}
this.wb.customFunctionEngine.needRecalculate = false;
}
this.asc_endPaste(true);
if (needDraw) {
const ws = this.wb && this.wb.getWorksheet();
ws && ws.draw();
}
if (callback)
callback(true);
return true;
};
spreadsheet_api.prototype.pre_Paste = function(_fonts, _images, callback)
{
AscFonts.FontPickerByCharacter.extendFonts(_fonts);
var oFontMap = {};
for(var i = 0; i < _fonts.length; ++i){
oFontMap[_fonts[i].name] = 1;
}
this._loadFonts(oFontMap, function() {
var aImages = [];
for(var key in _images){
if(_images.hasOwnProperty(key)){
aImages.push(_images[key])
}
}
if(aImages.length > 0) {
window["Asc"]["editor"].ImageLoader.LoadDocumentImages(aImages, true);
}
callback();
});
};
spreadsheet_api.prototype.getDefaultFontFamily = function () {
return this.wbModel.getDefaultFont();
};
spreadsheet_api.prototype.getDefaultFontSize = function () {
return this.wbModel.getDefaultSize();
};
spreadsheet_api.prototype._onEndLoadSdk = function () {
AscCommon.baseEditorsApi.prototype._onEndLoadSdk.call(this);
History = AscCommon.History;
this.controller = new AscCommonExcel.asc_CEventsController();
this.formulasList = AscCommonExcel.getFormulasInfo();
this.asc_setLocale(this.tmpLCID, this.tmpDecimalSeparator, this.tmpGroupSeparator);
this.asc_setLocalization(this.tmpLocalization);
this.asc_setViewMode(this.isViewMode);
if (this.openFileCryptBinary)
{
this.openFileCryptCallback(this.openFileCryptBinary);
}
};
spreadsheet_api.prototype.asc_OnShowContextMenu = function() {
this.asc_closeCellEditor();
};
spreadsheet_api.prototype._changePivotSimple = function(pivot, isInsert, needUpdateView, callback) {
var wsModel = pivot.GetWS();
if (isInsert) {
pivot.stashEmptyReportRange();
} else {
pivot.stashCurReportRange();
}
callback(wsModel);
let pivotChanged = pivot.getAndCleanChanged();
let updateRes;
if (pivotChanged.data) {
updateRes = pivot.updateAfterEdit();
}
let dataRow = updateRes && updateRes.dataRow;
let ranges = wsModel.updatePivotTable(pivot, pivotChanged, dataRow, false);
pivot.autoFitColumnsWidth(ranges, needUpdateView);
let changeRes = new AscCommonExcel.PivotChangeResult(c_oAscError.ID.No, c_oAscError.ID.No, pivotChanged, ranges, updateRes);
this.updateWorksheetByPivotTable(pivot, changeRes, needUpdateView);
};
spreadsheet_api.prototype.updatePivotTables = function() {
var t = this;
this.wbModel.forEach(function(wsModel) {
for (var i = 0; i < wsModel.pivotTables.length; ++i) {
var pivot = wsModel.pivotTables[i];
let pivotChanged = pivot.getAndCleanChanged();
var ranges = wsModel.updatePivotTable(pivot, pivotChanged, undefined, true);
let needUpdateView = false;
pivot.autoFitColumnsWidth(ranges, needUpdateView);
let changeRes = new AscCommonExcel.PivotChangeResult(c_oAscError.ID.No, c_oAscError.ID.No, pivotChanged, ranges, undefined);
t.updateWorksheetByPivotTable(pivot, changeRes, needUpdateView);
}
});
};
spreadsheet_api.prototype.updateWorksheetByPivotTable = function(pivot, changeRes, needUpdateView, updateSelection) {
let wsModel = pivot.GetWS();
let ws = this.wb.getWorksheet(wsModel.getIndex());
let changedPivots = changeRes.changedPivots;
var ranges = changeRes.ranges;
if (updateSelection) {
pivot.updateSelection(ws);
}
if (needUpdateView) {
if (changedPivots) {
changedPivots.forEach(function(changedPivot) {
ws.updateRanges(changedPivot.oldRanges);
});
}
if (ranges) {
ws.updateRanges(ranges);
}
//ws can be inactive in case of slicer on other sheet
if (this.wbModel.getActive() === wsModel.getIndex()) {
ws.draw();
}
}
};
spreadsheet_api.prototype.asc_getPivotInfo = function(opt_pivotTable) {
var ws = this.wbModel.getActiveWs();
var activeCell = ws.selectionRange.activeCell;
var pivotTable = opt_pivotTable || ws.getPivotTable(activeCell.col, activeCell.row);
if (pivotTable) {
return pivotTable.getContextMenuInfo(ws.selectionRange);
}
return null;
};
// Uses for % of, difference from, % difference from, running total in, % running total in, % of parent
spreadsheet_api.prototype.asc_getPivotShowValueAsInfo = function(showAs, opt_pivotTable) {
function correctInfoPercentOfParent(layout) {
if (layout.rows) {
if (layout.rows.length == 1 && AscCommonExcel.st_VALUES !== layout.rows[layout.rows.length - 1].fld) {
return layout.rows[layout.rows.length - 1];
} else if (layout.rows.length > 1){
for (let i = layout.rows.length - 2; i >= 0; i -= 1) {
if (layout.rows[i].fld !== AscCommonExcel.st_VALUES) {
return layout.rows[i];
}
}
if (layout.rows[layout.rows.length - 1].fld !== AscCommonExcel.st_VALUES) {
return layout.rows[layout.rows.length - 1];
}
}
} else if (layout.cols) {
if (layout.cols.length == 1 && AscCommonExcel.st_VALUES !== layout.cols[layout.cols.length - 1].fld) {
return layout.cols[layout.cols.length - 1];
} else if (layout.cols.length > 1){
for (let i = layout.cols.length - 2; i >= 0; i -= 1) {
if (layout.cols[i].fld !== AscCommonExcel.st_VALUES) {
return layout.cols[i];
}
}
if (layout.cols[layout.cols.length - 1].fld !== AscCommonExcel.st_VALUES) {
return layout.cols[layout.cols.length - 1];
}
}
}
return null;
}
var res = null;
var ws = this.wbModel.getActiveWs();
var activeCell = ws.selectionRange.activeCell;
var pivotTable = opt_pivotTable || ws.getPivotTable(activeCell.col, activeCell.row);
if (pivotTable) {
var layout = pivotTable.getLayoutByCell(activeCell.row, activeCell.col);
var cellLayout = null;
if (layout) {
if (showAs === Asc.c_oAscShowDataAs.PercentOfParent) {
cellLayout = correctInfoPercentOfParent(layout);
} else {
cellLayout = layout.getHeaderCellLayoutExceptValue();
}
}
if (cellLayout !== null) {
if (cellLayout.fld === null) {
let rowFields = pivotTable.asc_getRowFields();
let colFields = pivotTable.asc_getColumnFields();
let rowFieldsFirstIndex = rowFields && rowFields[0].asc_getIndex();
let firstIndex = rowFieldsFirstIndex;
if (rowFieldsFirstIndex === null) {
firstIndex = colFields && colFields[0].asc_getIndex();
}
cellLayout.fld = firstIndex;
}
res = new Asc.CT_DataField();
res.baseField = cellLayout.fld;
res.baseItem = cellLayout.v;
}
}
return res;
}
spreadsheet_api.prototype.asc_createSheetName = function () {
let sheetNames = [];
let wc = this.asc_getWorksheetsCount();
for(let i = 0; i < wc; i += 1) {
sheetNames.push(this.asc_getWorksheetName(i).toLowerCase());
}
let name = 'Sheet';
let i = 0;
while (i += 1) {
name = AscCommon.translateManager.getValue("Sheet") + i;
if (sheetNames.indexOf(name.toLowerCase()) < 0) {
break;
}
}
return name;
};
/**
* @param {CT_pivotTableDefinition} opt_pivotTable
* @param {row: number, col: number} opt_activeCell
* @return {boolean} Success
*/
spreadsheet_api.prototype.asc_pivotShowDetails = function(opt_pivotTable, opt_activeCell) {
if (this.collaborativeEditing.getGlobalLock() || !this.canEdit()) {
return false;
}
let t = this;
let ws = this.wbModel.getActiveWs();
let activeCell = opt_activeCell || ws.selectionRange.activeCell;
let pivotTable = opt_pivotTable || ws.getPivotTable(activeCell.col, activeCell.row);
if (!pivotTable) {
return false;
}
this._addWorksheetsCheck(function(res){
if (!res) {
return;
}
History.Create_NewPoint();
History.StartTransaction();
const indexes = pivotTable.getItemsIndexesByActiveCell(activeCell.row, activeCell.col);
const itemMapArray = pivotTable.getNoFilterItemFieldsMapArray(indexes.rowItemIndex, indexes.colItemIndex)
let worksheets = t._addWorksheetsWithoutLock([pivotTable.getShowDetailsSheetName(itemMapArray)], this.wbModel.getActive());
let ws = worksheets[0];
let lengths = pivotTable.showDetails(ws, itemMapArray);
let range = new Asc.Range(0, 0, lengths.colLength, lengths.rowLength);
let ref = range.getAbsName();
let options = t.asc_getAddFormatTableOptions(ref);
let tableStyle = t.asc_getDefaultTableStyle();
t.asc_addAutoFilter(tableStyle, options);
History.EndTransaction();
t.handlers.trigger("setSelection", range.clone());
});
return true;
};
/**
* @param {number} fld pivotFields index
* @param {boolean} isAll expand/collapse all
*/
spreadsheet_api.prototype.asc_pivotShowDetailsHeader = function(fld, isAll) {
if (this.collaborativeEditing.getGlobalLock() || !this.canEdit()) {
return false;
}
let t = this;
let ws = this.wbModel.getActiveWs();
let activeCell = ws.selectionRange.activeCell;
let pivotTable = ws.getPivotTable(activeCell.col, activeCell.row);
if (!pivotTable) {
return false;
}
pivotTable.showDetailsHeaderByCell(this, activeCell.row, activeCell.col, fld, isAll);
};
spreadsheet_api.prototype.asc_getAddPivotTableOptions = function(range) {
var ws = this.wb.getWorksheet();
if (ws.model.getSelection().isSingleRange()) {
return ws.getAddFormatTableOptions(range, true);
} else {
//todo move to getAddFormatTableOptions
var res = new AscCommonExcel.AddFormatTableOptions();
res.asc_setIsTitle(false);
res.asc_setRange("");
}
return res;
};
spreadsheet_api.prototype.asc_insertPivotNewWorksheet = function(dataRef, newSheetName) {
var t = this;
if (Asc.CT_pivotTableDefinition.prototype.isValidDataRef(dataRef)) {
var wb = this.wbModel;
var pivot;
this._isLockedAddWorksheets(function(res) {
if (res) {
History.Create_NewPoint();
History.StartTransaction();
var worksheets = t._addWorksheetsWithoutLock([newSheetName], wb.getActive());
var ws = worksheets[0];
var range = new Asc.Range(AscCommonExcel.NEW_PIVOT_COL, AscCommonExcel.NEW_PIVOT_ROW, AscCommonExcel.NEW_PIVOT_COL, AscCommonExcel.NEW_PIVOT_ROW);
pivot = t._asc_insertPivot(wb, dataRef, ws, range, false);
History.EndTransaction();
} else {
//todo
t.sendEvent('asc_onError', c_oAscError.ID.LockedCellPivot, c_oAscError.Level.NoCritical);
}
});
} else {
this.sendEvent('asc_onError', c_oAscError.ID.PivotLabledColumns, c_oAscError.Level.NoCritical);
}
// добавил возвращение таблицы, для методов билдера
return pivot;
};
spreadsheet_api.prototype.asc_insertPivotExistingWorksheet = function(dataRef, pivotRef, confirmation) {
if (!Asc.CT_pivotTableDefinition.prototype.isValidDataRef(dataRef)) {
this.sendEvent('asc_onError', c_oAscError.ID.PivotLabledColumns, c_oAscError.Level.NoCritical);
return;
}
var location = AscFormat.ExecuteNoHistory(function() {
return Asc.CT_pivotTableDefinition.prototype.parseDataRef(pivotRef);
}, this, []);
if (location) {
var wb = this.wbModel;
var ws = location.ws;
if (ws) {
this.wbModel.setActiveById(ws.getId());
} else {
ws = wb.getActiveWs();
}
this.wb.updateWorksheetByModel();
this.wb.showWorksheet();
return this._asc_insertPivot(wb, dataRef, ws, location.bbox, confirmation);
}
return null;
};
spreadsheet_api.prototype._asc_insertPivot = function(wb, dataRef, ws, bbox, confirmation) {
var t = this;
History.Create_NewPoint();
History.StartTransaction();
var pivotName = wb.dependencyFormulas.getNextPivotName();
var pivot = new Asc.CT_pivotTableDefinition(true);
var dataLocation = AscFormat.ExecuteNoHistory(function() {
return Asc.CT_pivotTableDefinition.prototype.parseDataRef(dataRef);
}, this, []);
var cacheDefinition = wb.getPivotCacheByDataLocation(dataLocation);
if (!cacheDefinition) {
cacheDefinition = new Asc.CT_PivotCacheDefinition();
cacheDefinition.asc_create();
cacheDefinition.fromDataRef(dataRef);
}
pivot.asc_create(ws, pivotName, cacheDefinition, bbox);
pivot.stashEmptyReportRange();
this._changePivotWithLockExt(pivot, confirmation, true, function(ws, pivot) {
ws.insertPivotTable(pivot, true, false);
pivot.setChanged(true);
});
History.EndTransaction();
return pivot;
};
spreadsheet_api.prototype.asc_refreshAllPivots = function(opt_confirmation) {
var t = this;
let pivotTables = [];
this.wbModel.forEach(function(ws) {
for (var i = 0; i < ws.pivotTables.length; ++i) {
pivotTables.push(ws.pivotTables[i]);
}
});
if (0 === pivotTables.length) {
return;
}
this._isLockedPivotAndConnectedByPivotCache(pivotTables, function(res) {
if (!res) {
t.sendEvent('asc_onError', c_oAscError.ID.PivotOverlap, c_oAscError.Level.NoCritical);
return;
}
for (let i = 0; i < pivotTables.length; ++i) {
let checkRefresh = pivotTables[i].checkRefresh();
if( c_oAscError.ID.No !== checkRefresh) {
t.sendEvent('asc_onError', checkRefresh, c_oAscError.Level.NoCritical);
return;
}
}
History.Create_NewPoint();
History.StartTransaction();
t.wbModel.dependencyFormulas.lockRecal();
let pivotTablesChangeRes = [];
for (let i = 0; i < pivotTables.length; ++i) {
let changeRes = t._changePivot(pivotTables[i], opt_confirmation, true, function (ws, pivot) {
pivot.refresh();
});
pivotTablesChangeRes.push(changeRes);
if (c_oAscError.ID.No !== changeRes.error || c_oAscError.ID.No !== changeRes.warning) {
break;
}
}
t.wbModel.dependencyFormulas.unlockRecal();
History.EndTransaction();
let success = t._changePivotEndCheckError(pivotTablesChangeRes[pivotTablesChangeRes.length - 1], function(){
t.asc_refreshAllPivots(true);
});
if (success) {
for (let i = 0; i < pivotTablesChangeRes.length; ++i) {
let pivotTable = pivotTables[i];
let changeRes = pivotTablesChangeRes[i];
t.updateWorksheetByPivotTable(pivotTable, changeRes, true, false);
}
}
});
};
spreadsheet_api.prototype._isLockedPivot = function (pivot, callback) {
var lockInfos = [];
pivot.fillLockInfo(lockInfos, this.collaborativeEditing);
this.collaborativeEditing.lock(lockInfos, callback);
};
spreadsheet_api.prototype._isLockedPivotAndConnectedBySlicer = function (pivot, flds, callback) {
if (this.collaborativeEditing.getGlobalLock() || !this.canEdit()) {
callback(false);
return;
}
var t = this;
var lockInfos = [];
pivot.fillLockInfo(lockInfos, this.collaborativeEditing);
flds.forEach(function(fld){
var pivotTables = pivot.getPivotTablesConnectedBySlicer(fld);
pivotTables.forEach(function(pivotTable){
pivotTable.fillLockInfo(lockInfos, t.collaborativeEditing);
});
});
this.collaborativeEditing.lock(lockInfos, callback);
};
spreadsheet_api.prototype._isLockedPivotAndConnectedByPivotCache = function (pivotTables, callback) {
if (this.collaborativeEditing.getGlobalLock()) {
callback(false);
return;
}
var t = this;
var lockInfos = [];
pivotTables.forEach(function(pivotTable) {
pivotTable.fillLockInfo(lockInfos, t.collaborativeEditing);
});
this.collaborativeEditing.lock(lockInfos, callback);
};
spreadsheet_api.prototype._changePivotWithLock = function (pivot, onAction, doNotCheckUnderlyingData, doNotAutoFitColumnsWidth) {
this._changePivotWithLockExt(pivot, false, true, onAction, doNotCheckUnderlyingData, doNotAutoFitColumnsWidth);
};
spreadsheet_api.prototype._changePivotWithLockExt = function (pivot, confirmation, updateSelection, onAction, doNotCheckUnderlyingData, doNotAutoFitColumnsWidth) {
// Проверка глобального лока
if (this.collaborativeEditing.getGlobalLock() || !this.canEdit()) {
return;
}
var t = this;
this._isLockedPivot(pivot, function (res) {
if (!res) {
t.sendEvent('asc_onError', c_oAscError.ID.PivotOverlap, c_oAscError.Level.NoCritical);
return;
}
History.Create_NewPoint();
History.StartTransaction();
t.wbModel.dependencyFormulas.lockRecal();
var changeRes = t._changePivot(pivot, confirmation, !doNotAutoFitColumnsWidth, onAction, doNotCheckUnderlyingData);
t.wbModel.dependencyFormulas.unlockRecal();
History.EndTransaction();
let success = t._changePivotEndCheckError(changeRes, function () {
//undo can replace pivot complitly. note: getPivotTableById returns nothing while insert operation
var pivotAfterUndo = t.wbModel.getPivotTableById(pivot.Get_Id()) || pivot;
t._changePivotWithLockExt(pivotAfterUndo, true, updateSelection, onAction);
});
if (success) {
t.updateWorksheetByPivotTable(pivot, changeRes, true, updateSelection);
}
});
};
spreadsheet_api.prototype._changePivotAndConnectedBySlicerWithLock = function (pivot, flds, onAction) {
// Проверка глобального лока
var t = this;
this._isLockedPivotAndConnectedBySlicer(pivot, flds, function(res) {
if (!res) {
t.sendEvent('asc_onError', c_oAscError.ID.PivotOverlap, c_oAscError.Level.NoCritical);
return;
}
onAction();
});
};
spreadsheet_api.prototype._changePivotAndConnectedByPivotCacheWithLock = function (pivot, confirmation, onAction, onRepeat, updateSelection) {
// Проверка глобального лока
var t = this;
var pivotTables = pivot.getPivotTablesConnectedByPivotCache();
this._isLockedPivotAndConnectedByPivotCache(pivotTables, function(res) {
if (!res) {
t.sendEvent('asc_onError', c_oAscError.ID.PivotOverlap, c_oAscError.Level.NoCritical);
return;
}
History.Create_NewPoint();
History.StartTransaction();
t.wbModel.dependencyFormulas.lockRecal();
var changeRes = onAction(confirmation, pivotTables);
t.wbModel.dependencyFormulas.unlockRecal();
History.EndTransaction();
let success = t._changePivotEndCheckError(changeRes, onRepeat);
if (success && changeRes) {
//todo pivot
t.updateWorksheetByPivotTable(pivot, changeRes, true, updateSelection);
}
});
};
spreadsheet_api.prototype._changePivot = function(pivot, confirmation, fitColumnsWidth, onAction, doNotCheckUnderlyingData) {
if (!doNotCheckUnderlyingData && !pivot.checkPivotUnderlyingData()) {
return new AscCommonExcel.PivotChangeResult(c_oAscError.ID.PivotWithoutUnderlyingData, c_oAscError.ID.No);
}
var wsModel = pivot.GetWS();
pivot.stashCurReportRange();
onAction(wsModel, pivot);
var pivotChanged = pivot.getAndCleanChanged();
var error = c_oAscError.ID.No;
var warning = c_oAscError.ID.No;
var updateRes, reportRanges;
if (pivotChanged.data) {
updateRes = pivot.updateAfterEdit();
reportRanges = pivot.getReportRanges();
error = wsModel.checkPivotReportLocationForError(reportRanges, pivot);
if (c_oAscError.ID.No === error) {
//todo remove cleanAll from checkPivotReportLocationForConfirm
warning = wsModel.checkPivotReportLocationForConfirm(reportRanges, pivotChanged);
if (confirmation) {
warning = c_oAscError.ID.No;
}
}
}
let ranges;
let success = c_oAscError.ID.No === error && c_oAscError.ID.No === warning;
if (success) {
let dataRow = updateRes && updateRes.dataRow;
ranges = wsModel.updatePivotTable(pivot, pivotChanged, dataRow, true);
pivot.autoFitColumnsWidth(ranges, fitColumnsWidth);
} else {
pivot.stashEmptyReportRange();//to prevent clearTableStyle while undo
}
return new AscCommonExcel.PivotChangeResult(error, warning, pivotChanged, ranges, updateRes);
};
spreadsheet_api.prototype._changePivotRevert = function () {
History.Undo();
History.Clear_Redo();
this._onUpdateDocumentCanUndoRedo();
};
spreadsheet_api.prototype._changePivotEndCheckError = function (changeRes, onRepeat) {
if (!changeRes) {
return true;
}
if (c_oAscError.ID.No !== changeRes.error) {
this._changePivotRevert();
this.sendEvent('asc_onError', changeRes.error, c_oAscError.Level.NoCritical);
} else if (c_oAscError.ID.No !== changeRes.warning) {
this._changePivotRevert();
this.handlers.trigger("asc_onConfirmAction", Asc.c_oAscConfirm.ConfirmReplaceRange, function (can) {
if (can) {
//repeate with whole checks because of collaboration changes
onRepeat();
}
});
} else {
return true;
}
return false;
};
spreadsheet_api.prototype._selectSearchingResults = function (bShow) {
var ws = this.wbModel.getActiveWs();
if (!bShow) {
this.wb.drawWS();
} else if (ws && ws.lastFindOptions) {
this.wb.drawWS();
}
};
spreadsheet_api.prototype.asc_getAppProps = function()
{
return this.wbModel && this.wbModel.App || null;
};
spreadsheet_api.prototype.checkObjectsLock = function(aObjectsId, fCallback) {
if(!this.collaborativeEditing) {
fCallback(true, true);
return;
}
this.collaborativeEditing.checkObjectsLock(aObjectsId, fCallback);
};
spreadsheet_api.prototype.asc_setCoreProps = function(oProps)
{
var oCore = this.getInternalCoreProps();
if(!oCore) {
return;
}
this.checkObjectsLock([oCore.Get_Id()], function(bNoLock) {
if(bNoLock) {
History.Create_NewPoint();
oCore.setProps(oProps);
}
});
return null;
};
spreadsheet_api.prototype.getInternalCoreProps = function()
{
return this.wbModel && this.wbModel.Core;
};
spreadsheet_api.prototype.asc_setGroupSummary = function (val, bCol) {
var ws = this.wb && this.wb.getWorksheet();
if(ws) {
ws.asc_setGroupSummary(val, bCol);
}
};
spreadsheet_api.prototype.asc_getGroupSummaryRight = function () {
var ws = this.wbModel.getActiveWs();
return ws && ws.sheetPr ? ws.sheetPr.SummaryRight : true;
};
spreadsheet_api.prototype.asc_getGroupSummaryBelow = function () {
var ws = this.wbModel.getActiveWs();
return ws && ws.sheetPr ? ws.sheetPr.SummaryBelow : true;
};
spreadsheet_api.prototype.asc_getSortProps = function (bExpand) {
var ws = this.wb && this.wb.getWorksheet();
if(ws) {
return ws.getSortProps(bExpand);
}
};
spreadsheet_api.prototype.asc_setSortProps = function (props, bCancel) {
var ws = this.wb && this.wb.getWorksheet();
if(ws) {
if(bCancel) {
ws.setSortProps(props, null, true);
} else {
ws.setSelectionInfo("customSort", props);
}
}
};
spreadsheet_api.prototype.asc_validSheetName = function (val) {
return window["AscCommon"].rx_test_ws_name.isValidName(val);
};
spreadsheet_api.prototype.asc_getRemoveDuplicates = function (bExpand) {
var ws = this.wb && this.wb.getWorksheet();
if(ws) {
return ws.getRemoveDuplicates(bExpand);
}
};
spreadsheet_api.prototype.asc_setRemoveDuplicates = function (props, bCancel) {
if (this.collaborativeEditing.getGlobalLock() || !this.canEdit()) {
return false;
}
var ws = this.wb && this.wb.getWorksheet();
if(ws) {
return ws.setRemoveDuplicates(props, bCancel);
}
};
spreadsheet_api.prototype.asc_getCF = function (type, id) {
let rules = this.wbModel.getRulesByType(type, id, true);
let activeSheet = this.wbModel.getActiveWs();
let activeRanges = activeSheet.selectionRange.ranges;
let sActiveRanges = [];
if (activeRanges) {
activeRanges.forEach(function (item) {
sActiveRanges.push(item.getAbsName());
});
}
return [rules, "=" + sActiveRanges.join(AscCommon.FormulaSeparators.functionArgumentSeparator)];
};
spreadsheet_api.prototype.asc_getPreviewCF = function (id, props, text) {
if (!props && text) {
props = new AscCommonExcel.CellXfs();
}
if (props) {
props.asc_getPreview2(this, id, text);
}
};
spreadsheet_api.prototype.asc_setCF = function (arr, deleteIdArr, presetId) {
if (this.collaborativeEditing.getGlobalLock() || !this.canEdit()) {
return false;
}
var ws = this.wb.getWorksheet();
ws.setCF(arr, deleteIdArr, presetId);
};
spreadsheet_api.prototype.asc_clearCF = function (type, id) {
if (this.collaborativeEditing.getGlobalLock() || !this.canEdit()) {
return false;
}
var rules = this.wbModel.getRulesByType(type, id);
if (rules && rules.length) {
var ws = this.wb.getWorksheet();
ws.deleteCF(rules, type);
}
};
spreadsheet_api.prototype._onUpdateCFLock = function (lockElem) {
var t = this;
var sheetId = lockElem.Element["sheetId"];
if (-1 !== sheetId && 0 === sheetId.indexOf(AscCommonExcel.CConditionalFormattingRule.sStartLockCFId)) {
sheetId = sheetId.split(AscCommonExcel.CConditionalFormattingRule.sStartLockCFId)[1];
var wsModel = this.wbModel.getWorksheetById(sheetId);
if (wsModel) {
var wsIndex = wsModel.getIndex();
var cFRule = wsModel.getCFRuleById(lockElem.Element["rangeOrObjectId"]);
if (cFRule && cFRule.val) {
cFRule = cFRule.val;
cFRule.isLock = lockElem.UserId;
this.handlers.trigger("asc_onLockCFRule", wsIndex, cFRule.id, lockElem.UserId);
} else {
var wsView = this.wb.getWorksheetById(sheetId);
wsView._lockAddNewRule = true;
}
this.handlers.trigger("asc_onLockCFManager", wsModel.index);
}
}
};
spreadsheet_api.prototype._onUnlockCF = function () {
var t = this;
if (t.wbModel) {
var i, length, wsModel, wsIndex;
for (i = 0, length = t.wbModel.getWorksheetCount(); i < length; ++i) {
wsModel = t.wbModel.getWorksheet(i);
wsIndex = wsModel.getIndex();
//TODO необходимо добавить инофрмацию о локе нового добавленного правила!!!
var isLockedRules = false;
if (wsModel.aConditionalFormattingRules && wsModel.aConditionalFormattingRules.length) {
wsModel.aConditionalFormattingRules.forEach(function (_rule) {
if (_rule.isLock) {
isLockedRules = true;
}
});
if (!isLockedRules) {
var wsView = this.wb.getWorksheetById(wsModel.Id);
if (wsView._lockAddNewRule) {
isLockedRules = true;
}
}
}
if (!isLockedRules) {
t.handlers.trigger("asc_onUnLockCFManager", wsIndex);
}
}
}
};
spreadsheet_api.prototype.asc_getFullCFIcons = function () {
return AscCommonExcel.getFullCFIcons();
};
spreadsheet_api.prototype.asc_getCFPresets = function () {
return AscCommonExcel.getFullCFPresets();
};
spreadsheet_api.prototype.asc_getCFIconsByType = function () {
return AscCommonExcel.getCFIconsByType();
};
spreadsheet_api.prototype._onCheckCFRemoveLock = function (lockElem) {
//лок правила - с правилом делать ничего нельзя
//лок менеджера - незалоченное правило можно удалять и редактировать. новые правила добавлять нельзя.
//так же нельзя перемещать местами правила
//лочим правило как объект. в лок кладём id и лист с префиксом CConditionalFormattingRule.sStartLockCFId
//на принятии изменений удаляем локи с соответсвующих элементов
//разлочиваем менеджер если нет залоченных элементов(т.е. проверяем все на лок)
//+ проверяем нет ли нового добавленного правила другим юзером
//всего для передачи в интерфейс 4 события - asc_onLockCFRule/asc_onUnLockCFRule; asc_onLockCFManager/asc_onUnLockCFManager
var res = false;
var t = this;
var sheetId = lockElem["sheetId"];
if (-1 !== sheetId && 0 === sheetId.indexOf(AscCommonExcel.CConditionalFormattingRule.sStartLockCFId)) {
res = true;
if (t.wbModel) {
sheetId = sheetId.split(AscCommonExcel.CConditionalFormattingRule.sStartLockCFId)[1];
var wsModel = t.wbModel.getWorksheetById(sheetId);
if (wsModel) {
var wsIndex = wsModel.getIndex();
var wsView = this.wb.getWorksheetById(sheetId);
var cFRule = wsModel.getCFRuleById(lockElem["rangeOrObjectId"]);
if (cFRule) {
if (cFRule.val.isLock) {
cFRule.val.isLock = null;
} else {
wsView._lockAddNewRule = null;
}
this.handlers.trigger("asc_onUnLockCFRule", wsIndex, lockElem["rangeOrObjectId"]);
} else {
wsView._lockAddNewRule = null;
}
}
}
}
return res;
};
spreadsheet_api.prototype.asc_isValidDataRefCf = function (type, props) {
return AscCommonExcel.isValidDataRefCf(type, props);
};
spreadsheet_api.prototype.asc_beforeInsertSlicer = function () {
//пока возвращаю только данные о ф/т
return this.wb.beforeInsertSlicer();
};
spreadsheet_api.prototype.asc_insertSlicer = function (arr) {
//пока возвращаю только данные о ф/т
return this.wb.insertSlicers(arr);
};
spreadsheet_api.prototype.asc_setSlicers = function (names, obj) {
return this.wb.setSlicers(names, obj);
};
spreadsheet_api.prototype.asc_Remove = function() {
var ws = this.wb.getWorksheet();
if (ws && ws.objectRender && ws.objectRender.controller) {
ws.objectRender.controller.resetChartElementsSelection();
}
AscCommon.baseEditorsApi.prototype.asc_Remove.call(this);
};
spreadsheet_api.prototype.asc_getDataValidationProps = function(extend) {
//если активная область затрагивает частично ячейку с date validation, частично без - выдаем предупреждение
//второе предупреждение - если выделено несколько разных ячеек с разными data validation
//возвращаем либо id ошибки, либо объект для диалога
var ws = this.wbModel.getActiveWs();
if (ws) {
return ws.getDataValidationProps(extend);
}
};
spreadsheet_api.prototype.asc_setDataValidation = function(props, switchApplySameSettings) {
if (this.collaborativeEditing.getGlobalLock() || !this.canEdit()) {
return false;
}
var ws = this.wb.getWorksheet();
if (ws) {
if (undefined === switchApplySameSettings) {
return ws.setDataValidationProps(props);
} else {
return ws.setDataValidationSameSettings(props, switchApplySameSettings);
}
}
};
spreadsheet_api.prototype.asc_getProtectedRanges = function () {
var ws = this.wbModel.getActiveWs();
if (ws) {
return ws.getProtectedRanges(true);
}
};
spreadsheet_api.prototype.asc_setProtectedRanges = function (arr, deleteArr) {
if (this.collaborativeEditing.getGlobalLock() || !this.canEdit()) {
return false;
}
if (this.wb && this.wb.getCellEditMode()) {
return;
//this.asc_closeCellEditor(true);
}
var ws = this.wb.getWorksheet();
var t = this;
var checkPassword = function (hash, doNotCheckPassword) {
if (doNotCheckPassword) {
ws.setProtectedRanges(arr, deleteArr);
} else {
var j = 0;
for (var i = 0; i < arr.length; i++) {
if (arr[i].temporaryPassword) {
arr[i].hashValue = hash[j];
arr[i].temporaryPassword = null;
j++;
}
}
ws.setProtectedRanges(arr, deleteArr);
}
t.sync_EndAction(Asc.c_oAscAsyncActionType.BlockInteraction);
};
var aCheckHash = [];
for (var i = 0; i < arr.length; i++) {
if (arr[i].temporaryPassword) {
aCheckHash.push({
password: arr[i].temporaryPassword,
salt: arr[i].saltValue,
spinCount: arr[i].spinCount,
alg: AscCommon.fromModelAlgorithmName(arr[i].algorithmName)
});
}
}
this.sync_StartAction(Asc.c_oAscAsyncActionType.BlockInteraction);
if (aCheckHash.length) {
AscCommon.calculateProtectHash(aCheckHash, checkPassword);
} else {
checkPassword(null, true);
}
};
spreadsheet_api.prototype._onUpdateProtectedRangesLock = function (lockElem) {
var t = this;
var sheetId = lockElem.Element["sheetId"];
if (-1 !== sheetId && 0 === sheetId.indexOf(Asc.CProtectedRange.sStartLock)) {
sheetId = sheetId.split(Asc.CProtectedRange.sStartLock)[1];
var wsModel = this.wbModel.getWorksheetById(sheetId);
if (wsModel) {
var wsIndex = wsModel.getIndex();
var protectedRange = wsModel.getProtectedRangeById(lockElem.Element["rangeOrObjectId"]);
if (protectedRange && protectedRange.val) {
protectedRange = protectedRange.val;
protectedRange.isLock = lockElem.UserId;
this.handlers.trigger("asc_onLockProtectedRange", wsIndex, protectedRange.Id, lockElem.UserId);
} else {
var wsView = this.wb.getWorksheetById(sheetId);
wsView._lockAddProtectedRange = true;
}
this.handlers.trigger("asc_onLockProtectedRangeManager", wsModel.index);
}
}
};
spreadsheet_api.prototype._onUnlockProtectedRange = function () {
var t = this;
if (t.wbModel) {
var i, length, wsModel, wsIndex;
for (i = 0, length = t.wbModel.getWorksheetCount(); i < length; ++i) {
wsModel = t.wbModel.getWorksheet(i);
wsIndex = wsModel.getIndex();
var isLocked = false;
if (wsModel.aProtectedRanges && wsModel.aProtectedRanges.length) {
wsModel.aProtectedRanges.forEach(function (pR) {
if (pR.isLock) {
isLocked = true;
}
});
if (!isLocked) {
var wsView = this.wb.getWorksheetById(wsModel.Id);
if (wsView._lockAddProtectedRange) {
isLocked = true;
}
}
}
if (!isLocked) {
t.handlers.trigger("asc_onUnLockProtectedRangeManager", wsIndex);
}
}
}
};
spreadsheet_api.prototype.asc_checkProtectedRangesPassword = function (val, data, callback) {
var ws = this.wb.getWorksheet();
return ws.model.checkProtectedRangesPassword(val, data, callback);
};
spreadsheet_api.prototype._onCheckProtectedRangeRemoveLock = function (lockElem) {
//лок правила - с правилом делать ничего нельзя
//лок менеджера - незалоченное правило можно удалять и редактировать. новые правила добавлять нельзя.
//так же нельзя перемещать местами правила
//лочим правило как объект. в лок кладём id и лист с префиксом Asc.CProtectedRange.sStartLock
//на принятии изменений удаляем локи с соответсвующих элементов
//разлочиваем менеджер если нет залоченных элементов(т.е. проверяем все на лок)
//+ проверяем нет ли нового добавленного правила другим юзером
//всего для передачи в интерфейс 4 события - asc_onLockProtectedRange/asc_onUnLockProtectedRange; asc_onLockProtectedRangeManager/asc_onUnLockProtectedRangeManager
var res = false;
var t = this;
var sheetId = lockElem["sheetId"];
if (-1 !== sheetId && 0 === sheetId.indexOf(Asc.CProtectedRange.sStartLock)) {
res = true;
if (t.wbModel) {
sheetId = sheetId.split(Asc.CProtectedRange.sStartLock)[1];
var wsModel = t.wbModel.getWorksheetById(sheetId);
if (wsModel) {
var wsIndex = wsModel.getIndex();
var wsView = this.wb.getWorksheetById(sheetId);
var protectedRange = wsModel.getProtectedRangeById(lockElem["rangeOrObjectId"]);
if (protectedRange) {
if (protectedRange.val.isLock) {
protectedRange.val.isLock = null;
} else {
wsView._lockAddProtectedRange = null;
}
this.handlers.trigger("asc_onUnLockProtectedRange", wsIndex, lockElem["rangeOrObjectId"]);
} else {
wsView._lockAddProtectedRange = null;
}
}
}
}
return res;
};
spreadsheet_api.prototype.asc_checkProtectedRangeName = function(checkName) {
if (!this.wbModel) {
return;
}
var ws = this.wbModel.getActiveWs();
return ws.checkProtectedRangeName(checkName);
};
spreadsheet_api.prototype.asc_getProtectedSheet = function () {
if (!this.wbModel) {
return;
}
var ws = this.wbModel.getActiveWs();
var res = null;
if (ws) {
if (ws.sheetProtection) {
res = ws.sheetProtection.clone();
} else {
res = new window["Asc"].CSheetProtection();
res.setDefaultInterface();
}
}
return res;
};
spreadsheet_api.prototype.asc_isProtectedSheet = function (index) {
if (!this.wbModel) {
return;
}
var sheetIndex = (undefined !== index && null !== index) ? index : this.wbModel.getActive();
var ws = this.wb.getWorksheet(sheetIndex);
var res = null;
if (ws) {
if (ws.model.getSheetProtection()) {
res = true;
}
}
return res;
};
spreadsheet_api.prototype.asc_setProtectedSheet = function (props) {
// Проверка глобального лока
if (this.collaborativeEditing.getGlobalLock() || !this.canEdit() || !this.wb) {
return false;
}
var wsView = this.wb.getWorksheet();
var ws = wsView && wsView.model;
if (ws && ws.isUserProtectedRangesIntersection(null, null, true)) {
this.handlers.trigger("asc_onError", c_oAscError.ID.ProtectedRangeByOtherUser, c_oAscError.Level.NoCritical);
return;
}
if (!props) {
this.handlers.trigger("asc_onError", c_oAscError.ID.PasswordIsNotCorrect, c_oAscError.Level.NoCritical);
this.handlers.trigger("asc_onChangeProtectWorksheet", i);
return;
}
if (this.wb && this.wb.getCellEditMode()) {
return;
//this.asc_closeCellEditor(true);
}
var i = this.wbModel.getActive();
var sheetId = this.wbModel.getWorksheet(i).getId();
var lockInfo = this.collaborativeEditing.getLockInfo(c_oAscLockTypeElem.Sheet, /*subType*/null, sheetId,
sheetId);
var t = this;
var callback = function (res) {
t.sync_EndAction(Asc.c_oAscAsyncActionType.BlockInteraction);
if (res) {
History.Create_NewPoint();
History.StartTransaction();
if (!t.wbModel.getWorksheet(i).setProtectedSheet(props, true)) {
t.handlers.trigger("asc_onError", c_oAscError.ID.LockedWorksheetRename,
c_oAscError.Level.NoCritical);
} else if (wsView) {
wsView.updateAfterChangeSheetProtection();
}
t.handlers.trigger("asc_onChangeProtectWorksheet", i);
History.EndTransaction();
} else {
//t.handlers.trigger("asc_onError", c_oAscError.ID.LockedWorksheetRename, c_oAscError.Level.NoCritical);
}
};
var checkPassword = function (hash, doNotCheckPassword) {
if (doNotCheckPassword) {
t.collaborativeEditing.lock([lockInfo], callback);
} else {
if (props.sheet) {
props.hashValue = hash && hash[0] ? hash[0] : null;
t.collaborativeEditing.lock([lockInfo], callback);
} else {
if (props.isPasswordXL() && hash && hash[0] && hash[0].toLowerCase() === props.password.toLowerCase()) {
props.password = null;
t.collaborativeEditing.lock([lockInfo], callback);
} else if (!props.isPasswordXL() && hash && hash[0] === props.hashValue) {
props.hashValue = null;
props.saltValue = null;
props.spinCount = null;
props.algorithmName = null;
t.collaborativeEditing.lock([lockInfo], callback);
} else {
//неверный пароль
t.handlers.trigger("asc_onError", c_oAscError.ID.PasswordIsNotCorrect,
c_oAscError.Level.NoCritical);
t.handlers.trigger("asc_onChangeProtectWorksheet", i);
t.sync_EndAction(Asc.c_oAscAsyncActionType.BlockInteraction);
}
}
props.temporaryPassword = null;
}
};
this.sync_StartAction(Asc.c_oAscAsyncActionType.BlockInteraction);
if (props && props.temporaryPassword != null) {
if (props.temporaryPassword === "") {
checkPassword([""]);
} else if (props.isPasswordXL()) {
checkPassword([AscCommonExcel.getPasswordHash(props.temporaryPassword, true)]);
} else {
var checkHash = {password: props.temporaryPassword, salt: props.saltValue, spinCount: props.spinCount,
alg: AscCommon.fromModelAlgorithmName(props.algorithmName)};
AscCommon.calculateProtectHash([checkHash], checkPassword);
}
} else {
checkPassword(null, true);
}
return true;
};
spreadsheet_api.prototype.asc_getProtectedWorkbook = function () {
var wb = this.wbModel;
var res = null;
if (wb) {
if (wb.workbookProtection) {
res = wb.workbookProtection.clone();
} else {
res = new asc.CWorkbookProtection();
}
}
return res;
};
spreadsheet_api.prototype.asc_isProtectedWorkbook = function (type) {
if (!this.wbModel) {
return;
}
var wb = this.wbModel;
return wb && wb.getWorkbookProtection(type);
};
spreadsheet_api.prototype.asc_setProtectedWorkbook = function (props) {
// Проверка глобального лока
if (this.collaborativeEditing.getGlobalLock() || !this.canEdit()) {
return false;
}
if (!props) {
this.handlers.trigger("asc_onError", c_oAscError.ID.PasswordIsNotCorrect, c_oAscError.Level.NoCritical);
this.handlers.trigger("asc_onChangeProtectWorkbook");
return;
}
if (this.wb && this.wb.getCellEditMode()) {
return;
//this.asc_closeCellEditor(true);
}
var wb = this.wbModel;
var sheet, i, arrLocks = [];
for (i = 0; i < wb.aWorksheets.length; ++i) {
sheet = wb.aWorksheets[i];
arrLocks.push(
this.collaborativeEditing.getLockInfo(c_oAscLockTypeElem.Sheet, /*subType*/null, sheet.getId(),
sheet.getId()));
}
var t = this;
var callback = function (res) {
t.sync_EndAction(Asc.c_oAscAsyncActionType.BlockInteraction);
if (res) {
History.Create_NewPoint();
History.StartTransaction();
if (!t.wbModel.setProtectedWorkbook(props, true)) {
t.handlers.trigger("asc_onError", c_oAscError.ID.LockedWorksheetRename,
c_oAscError.Level.NoCritical);
}
t.handlers.trigger("asc_onChangeProtectWorkbook");
History.EndTransaction();
} else {
//t.handlers.trigger("asc_onError", c_oAscError.ID.LockedWorksheetRename, c_oAscError.Level.NoCritical);
}
};
var checkPassword = function (hash, doNotCheckPassword) {
if (doNotCheckPassword) {
//TODO проверить, может быть нужен глобальный лок?
t.collaborativeEditing.lock(arrLocks, callback);
} else {
if (props.lockStructure) {
props.workbookHashValue = hash && hash[0] ? hash[0] : null;
t.collaborativeEditing.lock(arrLocks, callback);
} else {
if (props.isPasswordXL() && hash && hash[0] && hash[0].toLowerCase() === props.workbookPassword.toLowerCase()) {
props.workbookPassword = null;
t.collaborativeEditing.lock(arrLocks, callback);
} else if (!props.isPasswordXL() && hash && hash[0] === props.workbookHashValue) {
props.workbookHashValue = null;
props.workbookSaltValue = null;
props.workbookSpinCount = null;
props.workbookAlgorithmName = null;
//TODO проверить, может быть нужен глобальный лок?
t.collaborativeEditing.lock(arrLocks, callback);
} else {
//неверный пароль
t.handlers.trigger("asc_onError", c_oAscError.ID.PasswordIsNotCorrect,
c_oAscError.Level.NoCritical);
t.handlers.trigger("asc_onChangeProtectWorkbook");
t.sync_EndAction(Asc.c_oAscAsyncActionType.BlockInteraction);
}
}
props.temporaryPassword = null;
}
};
//only lockStructure
this.sync_StartAction(Asc.c_oAscAsyncActionType.BlockInteraction);
if (props && props.temporaryPassword != null) {
if (props.temporaryPassword === "") {
checkPassword([""]);
} else if (props.isPasswordXL()) {
checkPassword([AscCommonExcel.getPasswordHash(props.temporaryPassword, true)]);
} else {
var checkHash = {password: props.temporaryPassword, salt: props.workbookSaltValue, spinCount: props.workbookSpinCount,
alg: AscCommon.fromModelAlgorithmName(props.algorithmName)};
AscCommon.calculateProtectHash([checkHash], checkPassword);
}
} else {
checkPassword(null, true);
}
return true;
};
spreadsheet_api.prototype.updateSkin = function () {
var elem = document.getElementById("ws-v-scrollbar");
if (elem) {
elem.style.backgroundColor = AscCommon.GlobalSkin.ScrollBackgroundColor;
}
elem = document.getElementById("ws-h-scrollbar");
if (elem) {
elem.style.backgroundColor = AscCommon.GlobalSkin.ScrollBackgroundColor;
}
elem = document.getElementById("ws-scrollbar-corner");
if (elem) {
elem.style.backgroundColor = AscCommon.GlobalSkin.ScrollBackgroundColor;
}
if (this.wb) {
this.wb.updateSkin();
var ws = this.wb.getWorksheet();
if (ws) {
this.controller.updateScrollSettings();
ws.draw();
}
}
};
spreadsheet_api.prototype.turnOffSpecialModes = function() {
let bResult = false;
if (this.isStartAddShape) {
this.asc_endAddShape();
bResult = true;
}
if(this.isEyedropperStarted())
{
this.cancelEyedropper();
bResult = true;
}
if (this.isFormatPainterOn()) {
this.formatPainter.putState(AscCommon.c_oAscFormatPainterState.kOff);
if (this.wb) {
this.wb.formatPainter(AscCommon.c_oAscFormatPainterState.kOff, undefined);
}
bResult = true;
}
if(this.isInkDrawerOn()) {
this.stopInkDrawer();
bResult = true;
}
return bResult;
};
spreadsheet_api.prototype.onUpdateRestrictions = function () {
this._onUpdateDocumentCanUndoRedo();
this.turnOffSpecialModes();
};
spreadsheet_api.prototype.isShowShapeAdjustments = function()
{
return this.canEdit();
};
spreadsheet_api.prototype.isShowTableAdjustments = function()
{
return this.canEdit();
};
spreadsheet_api.prototype.isShowEquationTrack = function()
{
return this.canEdit();
};
spreadsheet_api.prototype.asc_getEscapeSheetName = function(sheet)
{
return AscCommon.parserHelp.getEscapeSheetName(sheet)
};
spreadsheet_api.prototype.asc_undoAllChanges = function() {
if (this.wb.getCellEditMode()) {
this.asc_closeCellEditor();
}
this.wb.undo({All : true});
};
spreadsheet_api.prototype.asc_restartCheckSpelling = function()
{
if (this.wb /*&& !this.spellcheckState.lockSpell*/) {
this._spellCheckRestart();
}
};
spreadsheet_api.prototype.asc_ConvertEquationToMath = function(oEquation, isAll)
{
// TODO: Вообще здесь нужно запрашивать шрифты, которые использовались в старой формуле,
// но пока это только 1 шрифт "Cambria Math".
var oWorkbook = this.wb;
var loader = AscCommon.g_font_loader;
var fontinfo = AscFonts.g_fontApplication.GetFontInfo("Cambria Math");
var isasync = loader.LoadFont(fontinfo, function()
{
oWorkbook.convertEquationToMath(oEquation, isAll);
}, this);
if (false === isasync)
{
oWorkbook.convertEquationToMath(oEquation, isAll);
}
};
/*отправляем инфомарцию, инфомарция в виде строки(id + ";" + isEdit + ";" + rangeStr;)
_autoSaveInner -> wb.sendCursor -> CDocsCoApi.prototype.sendCursor
NeedUpdateTargetForCollaboration - флаг высталяем в true, когда поменялся селект, потом предыдущая функция отсылает инфу на сервер
храним инф. о курсорах в
CCollaborativeEditing->m_aForeignCursorsData, добавляем/удаляем с помощью методов Add_ForeignCursor/Remove_ForeignCursor
удаляем инф. на
t.handlers.trigger("asc_onConnectionStateChanged", e) -> Remove_ForeignCursor
принимаем инфомарцию о курсорах
this.CoAuthoringApi.onCursor -> WorkbookView.prototype.Update_ForeignCursor
эвенты в интерфейс: asc_onShowForeignSelectLabel/asc_onHideForeignSelectLabel*/
spreadsheet_api.prototype.showForeignSelectLabel = function (UserId, X, Y, Color, isEdit) {
this.sendEvent("asc_onShowForeignCursorLabel", UserId, X, Y, new AscCommon.CColor(Color.r, Color.g, Color.b, 255), isEdit);
};
spreadsheet_api.prototype.hideForeignSelectLabel = function (UserId) {
this.sendEvent("asc_onHideForeignCursorLabel", UserId);
};
//TODO временно положил в прототип. перенести!
spreadsheet_api.prototype.sheetViewManagerLocks = [];
spreadsheet_api.prototype.asc_addNamedSheetView = function (duplicateNamedSheetView, setActive) {
var t = this;
var ws = this.wb && this.wb.getWorksheet();
var wsModel = ws ? ws.model : null;
if (!wsModel) {
return;
}
if (this.isNamedSheetViewManagerLocked(wsModel.Id)) {
t.handlers.trigger("asc_onError", c_oAscError.ID.LockedEditView, c_oAscError.Level.NoCritical);
return;
}
var namedSheetView;
if (duplicateNamedSheetView) {
namedSheetView = duplicateNamedSheetView.clone();
} else {
//если создаём новый вью когда находимся на другом вью, клонируем аквтиный
var activeNamedSheetViewId = wsModel.getActiveNamedSheetViewId();
if (activeNamedSheetViewId !== null) {
duplicateNamedSheetView = true;
namedSheetView = wsModel.getNamedSheetViewById(activeNamedSheetViewId).clone();
namedSheetView.name = null;
} else {
namedSheetView = new Asc.CT_NamedSheetView();
}
}
namedSheetView.ws = wsModel;
namedSheetView.name = namedSheetView.generateName();
this._isLockedNamedSheetView([namedSheetView], function(success) {
if (!success) {
t.handlers.trigger("asc_onError", c_oAscError.ID.LockedEditView, c_oAscError.Level.NoCritical);
return;
}
AscCommon.History.Create_NewPoint();
AscCommon.History.StartTransaction();
wsModel.addNamedSheetView(namedSheetView, !!duplicateNamedSheetView);
if (setActive) {
t.asc_setActiveNamedSheetView(namedSheetView.name);
}
AscCommon.History.EndTransaction();
if (!setActive) {
t.handlers.trigger("asc_onRefreshNamedSheetViewList", wsModel.index);
}
});
};
spreadsheet_api.prototype.asc_getNamedSheetViews = function () {
var ws = this.wb && this.wb.getWorksheet();
var wsModel = ws ? ws.model : null;
if (!wsModel) {
return null;
}
return wsModel.getNamedSheetViews();
};
spreadsheet_api.prototype.asc_getActiveNamedSheetView = function (index) {
var ws = this.wbModel.getWorksheet(index);
if (!ws) {
return null;
}
var activeNamedSheetViewId = ws.getActiveNamedSheetViewId();
if (activeNamedSheetViewId !== null) {
var activeNamedSheetView = ws.getNamedSheetViewById(activeNamedSheetViewId);
if (activeNamedSheetView) {
return activeNamedSheetView.name;
}
}
return null;
};
spreadsheet_api.prototype.asc_deleteNamedSheetViews = function (namedSheetViews) {
var t = this;
var ws = this.wb && this.wb.getWorksheet();
var wsModel = ws ? ws.model : null;
if (!wsModel) {
return;
}
this._isLockedNamedSheetView(namedSheetViews, function(success) {
if (!success) {
t.handlers.trigger("asc_onError", c_oAscError.ID.LockedEditView, c_oAscError.Level.NoCritical);
return;
}
AscCommon.History.Create_NewPoint();
AscCommon.History.StartTransaction();
wsModel.deleteNamedSheetViews(namedSheetViews);
AscCommon.History.EndTransaction();
t.handlers.trigger("asc_onRefreshNamedSheetViewList", wsModel.index);
});
};
spreadsheet_api.prototype._isLockedNamedSheetView = function (namedSheetViews, callback) {
if (!namedSheetViews || !namedSheetViews.length) {
callback(false);
}
var lockInfoArr = [];
for (var i = 0; i < namedSheetViews.length; i++) {
var namedSheetView = namedSheetViews[i];
var lockInfo = this.collaborativeEditing.getLockInfo(c_oAscLockTypeElem.Object, null,
this.asc_getActiveWorksheetId(), namedSheetView.Get_Id());
lockInfoArr.push(lockInfo);
}
this.collaborativeEditing.lock(lockInfoArr, callback);
};
spreadsheet_api.prototype._onUpdateNamedSheetViewLock = function(lockElem) {
var t = this;
if (c_oAscLockTypeElem.Object === lockElem.Element["type"]) {
var wsModel = t.wbModel.getWorksheetById(lockElem.Element["sheetId"]);
if (wsModel) {
var wsIndex = wsModel.getIndex();
var sheetView = wsModel.getNamedSheetViewById(lockElem.Element["rangeOrObjectId"]);
if (sheetView) {
sheetView.isLock = lockElem.UserId;
this.handlers.trigger("asc_onRefreshNamedSheetViewList", wsIndex);
}
this.sheetViewManagerLocks[wsModel.Id] = true;
}
}
};
spreadsheet_api.prototype._onUpdateAllSheetViewLock = function () {
var t = this;
if (t.wbModel) {
var i, length, wsModel, wsIndex;
for (i = 0, length = t.wbModel.getWorksheetCount(); i < length; ++i) {
wsModel = t.wbModel.getWorksheet(i);
wsIndex = wsModel.getIndex();
if (wsModel.aNamedSheetViews) {
for (var j = 0; j < wsModel.aNamedSheetViews.length; j++) {
var sheetView = wsModel.aNamedSheetViews[j];
sheetView.isLock = null;
}
}
this.handlers.trigger("asc_onRefreshNamedSheetViewList", wsIndex);
this.sheetViewManagerLocks[wsModel.Id] = false;
}
}
};
spreadsheet_api.prototype.isNamedSheetViewManagerLocked = function (id) {
return this.sheetViewManagerLocks[id];
};
spreadsheet_api.prototype.asc_setActiveNamedSheetView = function(name, index) {
if (index === undefined) {
index = this.wbModel.getActive();
}
var ws = this.wbModel.getWorksheet(index);
//при переходе между вью - hidden manager не обновляется.
var changedHiddenRowsArr = [];
var historyUpdateRange = new asc.Range(0, 0, 0, 0);
var i;
ws.autoFilters.forEachTables(function (table) {
historyUpdateRange.union2(table.Ref);
for (var i = table.Ref.r1; i < table.Ref.r2; i++) {
ws._getRowNoEmpty(i, function(row){
if (row) {
changedHiddenRowsArr[row.index] = row.getHidden();
}
});
}
});
if (ws.AutoFilter && ws.AutoFilter.Ref) {
for (i = ws.AutoFilter.Ref.r1; i < ws.AutoFilter.Ref.r2; i++) {
ws._getRowNoEmpty(i, function(row){
if (row) {
changedHiddenRowsArr[row.index] = row.getHidden();
}
});
}
}
var oldActiveId = ws.getActiveNamedSheetViewId();
ws.setActiveNamedSheetView(null);
for (i = 0; i < ws.aNamedSheetViews.length; i++) {
if (name === ws.aNamedSheetViews[i].name) {
ws.setActiveNamedSheetView(ws.aNamedSheetViews[i].Id);
ws.aNamedSheetViews[i]._isActive = true;
} else {
ws.aNamedSheetViews[i]._isActive = false;
}
}
if (oldActiveId !== ws.getActiveNamedSheetViewId()) {
AscCommon.History.Create_NewPoint();
AscCommon.History.StartTransaction();
if (ws.AutoFilter && ws.AutoFilter.Ref) {
historyUpdateRange.union2(ws.AutoFilter.Ref);
}
AscCommon.History.Add(AscCommonExcel.g_oUndoRedoWorksheet, AscCH.historyitem_Worksheet_SetActiveNamedSheetView,
ws ? ws.getId() : null, historyUpdateRange,
new AscCommonExcel.UndoRedoData_FromTo(oldActiveId, ws.getActiveNamedSheetViewId()), true);
AscCommon.History.EndTransaction();
//TODO нужно переприменять в дальнейшем сортировку
//если переходим на вью, то необходимо открыть все строки и применить фильтры
//если переходим на дефолт, то необходимо скрыть ещё те строки, которые в модели лежат
//посколько при переходе во вью данные из модели удалились - их нужно получить
//т.е. нужно где-то хранить!
//при переходе во вью - переносим с дефолта все флаги о скрытии строчек
//переприменяем все фильтры
//применяем скрытие строчек внутрии а/ф - используя новый флаг о скрытии
//все остальные строчки - используя старый флаг о скрытии строк
//получение данных о скрытой строке: в режиме вью внутри а/ф используем новый флаг
//вне а/ф - старый флаг
//при переходе из дефолта внутри а/ф(к которому не применен фильтр) наследуем флаг об скрытии/открытии ячеек
//для этого прохожусь по всем строкам - и наследую флаг
if (ws.getActiveNamedSheetViewId() !== null) {
//чтобы не усложнять логику решил не наследовать внутри а/ф скрытые строки от дефолта
//просто отрываем все строки, а далее применяем те, что скрыты во вью
ws.getRange3(0, 0, AscCommon.gc_nMaxRow0, 0)._foreachRowNoEmpty(function(row) {
if (ws.autoFilters.containInFilter(row.index/*, true*/)) {
row.setHidden(false, true);
} /*else {
//наследуем с дефолта, если в этих строчках нет применнного фильтра
row.setHidden(row.getHidden(false), true);
}*/
});
}
var _changeHiddenManager = function (_row) {
if (_row && _row.index >= 0 && (!_row.getHidden() !== !changedHiddenRowsArr[_row.index])) {
ws.hiddenManager.addHidden(true, _row.index);
}
};
ws.autoFilters.forEachTables(function (table) {
for (var i = table.Ref.r1; i < table.Ref.r2; i++) {
ws._getRowNoEmpty(i, function(row){
_changeHiddenManager(row);
});
}
});
if (ws.AutoFilter && ws.AutoFilter.Ref) {
for (i = ws.AutoFilter.Ref.r1; i < ws.AutoFilter.Ref.r2; i++) {
ws._getRowNoEmpty(i, function(row){
_changeHiddenManager(row);
});
}
}
var oRange = new AscCommonExcel.Range(ws, historyUpdateRange.r1, historyUpdateRange.c1, historyUpdateRange.r2, historyUpdateRange.c2);
this.wb.handleChartsOnWorkbookChange([oRange]);
ws.autoFilters.reapplyAllFilters(true, ws.getActiveNamedSheetViewId() !== null, null, true);
this.updateAllFilters();
this.handlers.trigger("asc_onRefreshNamedSheetViewList", index);
}
};
spreadsheet_api.prototype.updateAllFilters = function() {
var t = this;
var wsModel = this.wbModel.getWorksheet(this.wbModel.getActive());
var ws = t.wb.getWorksheet(wsModel.getIndex());
var arrChangedRanges = [];
for (var i = 0; i < wsModel.TableParts.length; ++i) {
var table = wsModel.TableParts[i];
arrChangedRanges.push(table.Ref);
}
if (wsModel.AutoFilter) {
arrChangedRanges.push(wsModel.AutoFilter.Ref);
}
ws._updateGroups();
//wsModel.autoFilters.reDrawFilter(arn);
var oRecalcType = AscCommonExcel.recalcType.full;
//reinitRanges = true;
//updateDrawingObjectsInfo = {target: c_oTargetType.RowResize, row: arn.r1};
ws._initCellsArea(oRecalcType);
if (oRecalcType) {
ws.cache.reset();
}
ws._cleanCellsTextMetricsCache();
ws.objectRender.bUpdateMetrics = false;
ws._prepareCellTextMetricsCache();
ws.objectRender.bUpdateMetrics = true;
//arrChangedRanges = arrChangedRanges.concat(t.model.hiddenManager.getRecalcHidden());
ws.cellCommentator.updateAreaComments();
ws.draw();
ws._updateVisibleRowsCount();
ws.handlers.trigger("selectionChanged");
ws.getSelectionMathInfo(function (info) {
ws.handlers.trigger("selectionMathInfoChanged", info);
});
};
spreadsheet_api.prototype.asc_EditSelectAll = function() {
if (this.wb) {
this.wb.selectAll();
}
};
spreadsheet_api.prototype.asc_addCellWatches = function (sRange) {
var t = this;
if (this.wb && this.wb.model) {
var oRange = t.wb.model.getRangeAndSheetFromStr(sRange);
if (oRange && oRange.sheet && oRange.range) {
var maxCellsCount = 100;
var countCells = oRange.range.getWidth() * oRange.range.getHeight();
if (countCells > maxCellsCount) {
this.handlers.trigger("asc_onConfirmAction", Asc.c_oAscConfirm.ConfirmAddCellWatches, function (can) {
if (can) {
t.wb.model.addCellWatches(oRange.sheet, oRange.range);
}
}, countCells);
} else {
t.wb.model.addCellWatches(oRange.sheet, oRange.range);
}
}
}
};
spreadsheet_api.prototype.asc_deleteCellWatches = function (aCellWatches, opt_remove_all) {
if (this.wb && this.wb.model) {
this.wb.model.delCellWatches(aCellWatches, true, opt_remove_all);
}
};
spreadsheet_api.prototype.asc_getCellWatches = function () {
var res = null;
if (this.wb && this.wb.model) {
this.wb.model.recalculateCellWatches(true);
for (var i = 0; i < this.wb.model.aWorksheets.length; i++) {
var ws = this.wb.model.aWorksheets[i];
if (ws && ws.aCellWatches.length) {
if (!res) {
res = [];
}
res = res.concat(ws.aCellWatches);
}
}
}
return res;
};
spreadsheet_api.prototype.setDrawGroupsRestriction = function() {
if (this.wb) {
//пока использую строку. будут другие ограничения на отрисовку - необходимо завести константы
this.wb.setDrawRestriction("groups");
}
};
spreadsheet_api.prototype.onWorksheetChange = function(props) {
let ws = this.wbModel.getActiveWs();
let range = null;
let result = null;
if (Array.isArray(props)) {
// todo сделать получение листа ещё
range = ws.getRange3(props[0].r1, props[0].c1, props[0].r2, props[0].c2);
let arr = props.length <= 1 ? null : props.map(function(r){
return ws.getRange3(r.r1, r.c1, r.r2, r.c2);
})
result = this.private_GetRange(range, arr);
} else {
// todo сделать получение листа ещё
range = ws.getRange3(props.r1, props.c1, props.r2, props.c2);
result = this.private_GetRange(range);
}
this.sendEvent('onWorksheetChange', result);
};
spreadsheet_api.prototype.asc_enterText = function(codePoints)
{
let wb = this.wb;
if (!wb)
return false;
return wb.EnterText(codePoints);
};
spreadsheet_api.prototype.asc_correctEnterText = function(oldValue, newValue)
{
let wb = this.wb;
if (!wb)
return false;
return wb.CorrectEnterText(oldValue, newValue);
};
spreadsheet_api.prototype.asc_getExternalReferences = function() {
return this.wb.getExternalReferences();
};
spreadsheet_api.prototype.asc_updateExternalReferences = function(arr, callback) {
if (this.collaborativeEditing.getGlobalLock() || !this.canEdit()) {
return;
}
this.wb.updateExternalReferences(arr, callback);
};
spreadsheet_api.prototype.asc_openExternalReference = function(externalReference) {
let t = this;
let isLocalDesktop = window["AscDesktopEditor"] && window["AscDesktopEditor"]["IsLocalFile"]();
if (isLocalDesktop) {
window["AscDesktopEditor"]["openExternalReference"](externalReference.externalReference.Id, function(error) {
let internalError = Asc.c_oAscError.ID.No;
switch (error) {
case 0: internalError = Asc.c_oAscError.ID.ConvertationOpenError; break;
default: break;
}
if (Asc.c_oAscError.ID.No !== internalError) {
t.sendEvent("asc_onError", internalError, c_oAscError.Level.NoCritical);
}
});
return null;
} else {
return externalReference;
}
};
spreadsheet_api.prototype.asc_removeExternalReferences = function(arr) {
if (this.collaborativeEditing.getGlobalLock() || !this.canEdit()) {
return;
}
this.wb.removeExternalReferences(arr);
};
spreadsheet_api.prototype.asc_changeExternalReference = function(eR, to) {
if (this.collaborativeEditing.getGlobalLock() || !this.canEdit()) {
return;
}
this.wb.changeExternalReference(eR, to);
};
/*
* set format option wb->externalLinksPr->autoRefresh
* start timer if true, clear timer if false
* if update from interface all links, timer restart
* if part of links - not restart
* event from model to view - "changeUpdateLinks"
* @param {bool} val
* */
spreadsheet_api.prototype.asc_setUpdateLinks = function(val, bFirstStart) {
//ms desktop: update automatic(realtime) only if open source file(not depends on workbookPr->UpdateLinks property). if source file changed by another editor - not update links
//workbookPr->UpdateLinks only the opening is affected
//ms online
//timer update depends on workbookPr->UpdateLinks property. update only in "always"
if (this.collaborativeEditing.getGlobalLock() || !this.canEdit()) {
return;
}
let wbModel = this.wbModel;
if (!wbModel) {
return;
}
wbModel.setUpdateLinks(val, true, bFirstStart);
};
spreadsheet_api.prototype.asc_getUpdateLinks = function() {
let wbModel = this.wbModel;
if (!wbModel) {
return;
}
return wbModel.getUpdateLinks();
};
spreadsheet_api.prototype.asc_fillHandleDone = function(range) {
if (this.canEdit()) {
let wb = this.wb;
if (!wb) {
return;
}
wb.fillHandleDone(range);
}
};
spreadsheet_api.prototype.asc_canFillHandle = function(range) {
if (this.canEdit()) {
let wb = this.wb;
if (!wb) {
return;
}
return wb.canFillHandle(range, true);
}
return false;
};
spreadsheet_api.prototype.getEyedropperImgData = function() {
const oWSViewerCanvas = document.getElementById("ws-canvas");
const oWSOverlayCanvas = document.getElementById("ws-canvas-overlay");
const oGrViewerCanvas = document.getElementById("ws-canvas-graphic");
const oGrOverlayCanvas = document.getElementById("ws-canvas-graphic-overlay");
if(!oWSViewerCanvas || !oWSOverlayCanvas
|| !oGrViewerCanvas || !oGrOverlayCanvas) {
return null;
}
let oCanvas = document.createElement("canvas");
oCanvas.width = oWSViewerCanvas.width;
oCanvas.height = oWSViewerCanvas.height;
const oCtx = oCanvas.getContext("2d");
oCtx.drawImage(oWSViewerCanvas, 0, 0);
oCtx.drawImage(oWSOverlayCanvas, 0, 0);
oCtx.drawImage(oGrViewerCanvas, 0, 0);
oCtx.drawImage(oGrOverlayCanvas, 0, 0);
return oCtx.getImageData(0, 0, oCanvas.width, oCanvas.height);
};
spreadsheet_api.prototype.asc_addUserProtectedRange = function (obj) {
if (this.collaborativeEditing.getGlobalLock() || !this.canEdit()) {
return false;
}
if (this.wb && this.wb.getCellEditMode()) {
return;
}
this.wb.changeUserProtectedRanges(null, obj);
};
spreadsheet_api.prototype.asc_changeUserProtectedRange = function (oldObj, newObj) {
if (this.collaborativeEditing.getGlobalLock() || !this.canEdit()) {
return false;
}
if (this.wb && this.wb.getCellEditMode()) {
return;
}
this.wb.changeUserProtectedRanges(oldObj, newObj);
};
spreadsheet_api.prototype.asc_deleteUserProtectedRange = function (arr) {
if (this.collaborativeEditing.getGlobalLock() || !this.canEdit()) {
return false;
}
if (this.wb && this.wb.getCellEditMode()) {
return;
}
this.wb.deleteUserProtectedRanges(arr);
};
spreadsheet_api.prototype.asc_getUserProtectedRanges = function(sheetName) {
if (!this.wb) {
return null;
}
let res = [];
if (sheetName) {
let sheet = this.wb.model.getWorksheetByName(sheetName);
for (let i = 0; i < sheet.userProtectedRanges.length; i++) {
res.push(sheet.userProtectedRanges[i]);
}
} else {
this.wb.model.forEach(function (ws) {
for (let i = 0; i < ws.userProtectedRanges.length; i++) {
res.push(ws.userProtectedRanges[i]);
}
});
}
res.sort(function (a, b) {
return a.name > b.name ? 1 : -1;
});
return res;
};
spreadsheet_api.prototype._onUpdateUserProtectedRange = function (lockElem) {
let _element = lockElem.Element;
let isNeedObject = _element["sheetId"] !== -1 && _element["rangeOrObjectId"] !== -1;
let isNeedType = isNeedObject && AscCommonExcel.c_oAscLockTypeElemSubType.UserProtectedRange === _element.subType &&
c_oAscLockTypeElem.Object === _element["type"];
if (isNeedType) {
let sheet = this.wbModel.getWorksheetById(_element["sheetId"]);
if (sheet) {
var userRange = sheet.getUserProtectedRangeById(_element["rangeOrObjectId"]);
if (userRange) {
if (!this.collaborativeEditing.getFast()) {
userRange.obj.isLock = lockElem.UserId;
}
this.handlers.trigger("asc_onRefreshUserProtectedRangesList");
}
}
this.handlers.trigger("asc_onLockUserProtectedManager", true);
}
};
spreadsheet_api.prototype._onUnlockUserProtectedRanges = function() {
this.wb.unlockUserProtectedRanges();
};
spreadsheet_api.prototype.asc_checkUserProtectedRangeName = function(checkName) {
if (!this.wbModel) {
return;
}
return this.wbModel.checkUserProtectedRangeName(checkName);
};
spreadsheet_api.prototype.asc_SetSheetViewType = function(val) {
if (this.collaborativeEditing.getGlobalLock() || !this.canEdit()) {
return;
}
let wb = this.wb;
if (!wb) {
return;
}
var ws = this.wb.getWorksheet();
//val -> window['Asc']['c_oAscESheetViewType']
return ws.setSheetViewType(val);
};
spreadsheet_api.prototype.asc_GetSheetViewType = function(index) {
let sheetIndex = (undefined !== index && null !== index) ? index : this.wbModel.getActive();
let ws = this.wbModel.getWorksheet(sheetIndex);
let res = null;
if (ws && ws.sheetViews) {
var sheetView = ws.sheetViews[0];
if (sheetView) {
res = sheetView.view;
}
}
return res == null ? AscCommonExcel.ESheetViewType.normal : res;
};
spreadsheet_api.prototype.asc_InsertPageBreak = function() {
if (this.collaborativeEditing.getGlobalLock() || !this.canEdit()) {
return;
}
let wb = this.wb;
if (!wb) {
return;
}
var ws = this.wb.getWorksheet();
return ws && ws.insertPageBreak();
};
spreadsheet_api.prototype.asc_RemovePageBreak = function() {
if (this.collaborativeEditing.getGlobalLock() || !this.canEdit()) {
return;
}
let wb = this.wb;
if (!wb) {
return;
}
var ws = this.wb.getWorksheet();
return ws.removePageBreak();
};
spreadsheet_api.prototype.asc_ResetAllPageBreaks = function() {
if (this.collaborativeEditing.getGlobalLock() || !this.canEdit()) {
return;
}
let wb = this.wb;
if (!wb) {
return;
}
var ws = this.wb.getWorksheet();
return ws.resetAllPageBreaks();
};
spreadsheet_api.prototype.asc_GetPageBreaksDisableType = function (index) {
if (!this.wbModel) {
return;
}
let sheetIndex = (undefined !== index && null !== index) ? index : this.wbModel.getActive();
let ws = this.wbModel.getWorksheet(sheetIndex);
let res = Asc.c_oAscPageBreaksDisableType.none;
if (ws) {
let isPageBreaks = ws && ((ws.colBreaks && ws.colBreaks.getCount()) || (ws.rowBreaks && ws.rowBreaks.getCount()));
let activeCell = ws.selectionRange && ws.selectionRange.activeCell;
let isFirstActiveCell = activeCell && activeCell.col === 0 && activeCell.row === 0;
if (isFirstActiveCell && !isPageBreaks) {
//disable all
res = Asc.c_oAscPageBreaksDisableType.all;
} else if (isFirstActiveCell && isPageBreaks) {
//disable insert/remove
res = Asc.c_oAscPageBreaksDisableType.insertRemove;
} else if (!isFirstActiveCell && !isPageBreaks) {
//disable reset
res = Asc.c_oAscPageBreaksDisableType.reset;
}
}
return res;
};
//goal seek
spreadsheet_api.prototype.asc_StartGoalSeek = function (sFormulaCell, nExpectedValue, sChangingCell) {
if (!this.wb) {
return;
}
return this.wb.startGoalSeek(sFormulaCell, nExpectedValue, sChangingCell);
};
spreadsheet_api.prototype.asc_CloseGoalClose = function (bSave) {
if (!this.wb) {
return;
}
return this.wb.closeGoalSeek(bSave);
};
spreadsheet_api.prototype.asc_PauseGoalSeek = function () {
if (!this.wb) {
return;
}
return this.wb.pauseGoalSeek();
};
spreadsheet_api.prototype.asc_ContinueGoalSeek = function () {
if (!this.wb) {
return;
}
return this.wb.continueGoalSeek();
};
spreadsheet_api.prototype.asc_StepGoalSeek = function () {
if (!this.wb) {
return;
}
return this.wb.stepGoalSeek();
};
spreadsheet_api.prototype.asc_TracePrecedents = function() {
if (this.collaborativeEditing.getGlobalLock() || !this.canEdit()) {
return;
}
let wb = this.wb;
if (!wb) {
return;
}
let ws = wb.getWorksheet();
return ws.tracePrecedents();
};
spreadsheet_api.prototype.asc_TraceDependents = function() {
if (this.collaborativeEditing.getGlobalLock() || !this.canEdit()) {
return;
}
let wb = this.wb;
if (!wb) {
return;
}
let ws = wb.getWorksheet();
return ws.traceDependents();
};
spreadsheet_api.prototype.asc_RemoveTraceArrows = function(type) {
if (this.collaborativeEditing.getGlobalLock() || !this.canEdit()) {
return;
}
let wb = this.wb;
if (!wb) {
return;
}
let ws = wb.getWorksheet();
return ws.removeTraceArrows(type);
};
/** Returns array of function info
* @param {number} pos - cursor position
* @param {string} s - cell text
* @returns {asc_CCompleteMenu[]}
*/
spreadsheet_api.prototype.asc_GetEditableFunctions = function(pos, s) {
let wb = this.wb;
if (!wb) {
return;
}
return wb.getEditableFunctions(pos, s);
};
spreadsheet_api.prototype.getSelectionState = function() {
let wb = this.wb;
if (!wb) {
return;
}
return wb.getSelectionState();
};
spreadsheet_api.prototype.getSpeechDescription = function(prevState, action) {
let wb = this.wb;
if (!wb) {
return;
}
return wb.getSpeechDescription(prevState, wb.getSelectionState(), action);
};
spreadsheet_api.prototype.asc_GetSeriesSettings = function() {
let res = new Asc.asc_CSeriesSettings();
let ws = this.wb && this.wb.getWorksheet();
res.prepare(ws);
return res;
};
spreadsheet_api.prototype.asc_FillCells = function(type, settings) {
if (this.collaborativeEditing.getGlobalLock() || !this.canEdit()) {
return;
}
let wb = this.wb;
if (!wb) {
return;
}
var ws = this.wb.getWorksheet();
if (settings) {
settings.asc_setContextMenuChosenProperty(type);
settings.init(ws);
}
return ws.applySeriesSettings(type, settings);
};
spreadsheet_api.prototype.asc_CancelFillCells = function() {
if (this.collaborativeEditing.getGlobalLock() || !this.canEdit()) {
return;
}
let wb = this.wb;
if (!wb) {
return;
}
var ws = this.wb.getWorksheet();
return ws && ws.cleanFillHandleProps();
};
/**
* Returns values of calculation options
* @returns {asc_CCalcSettings}
*/
spreadsheet_api.prototype.asc_GetCalcSettings = function () {
let wbModel = this.wbModel
if (!wbModel) {
return;
}
let res = new Asc.asc_CCalcSettings();
res.asc_initSettings(wbModel);
return res;
};
/**
* Updates the calculation options.
* @param {asc_CCalcSettings} oCalcSettings - The calculation options changed from UI.
*/
spreadsheet_api.prototype.asc_UpdateCalcSettings = function (oCalcSettings) {
this.wb.updateCalcSettings(oCalcSettings);
};
spreadsheet_api.prototype.addCustomFunction = function(func, options) {
let wb = this.wb;
if (!wb) {
return;
}
return wb.addCustomFunction(func, options);
};
spreadsheet_api.prototype.removeCustomFunction = function(sName) {
let wb = this.wb;
if (!wb) {
return;
}
return wb.customFunctionEngine && wb.customFunctionEngine.remove(sName);
};
spreadsheet_api.prototype.clearCustomFunctions = function() {
let wb = this.wb;
if (!wb) {
return;
}
return wb.customFunctionEngine && wb.customFunctionEngine.clear();
};
spreadsheet_api.prototype.recalculateCustomFunctions = function() {
let needDraw = null;
if (this.wb && this.wb.customFunctionEngine && this.wb.customFunctionEngine.needRecalculate) {
if (this.wbModel.addCustomFunctionToChanged()) {
needDraw = true;
}
this.wb.customFunctionEngine.needRecalculate = false;
}
if (needDraw) {
this.wb.model.dependencyFormulas.calcTree();
const ws = this.wb && this.wb.getWorksheet();
ws && ws.draw();
return true;
}
return false;
};
spreadsheet_api.prototype.asc_getCustomFunctionInfo = function(sName, bIgnoreLocal) {
let wb = this.wb;
if (!wb) {
return;
}
return wb.customFunctionEngine && wb.customFunctionEngine.getFunc(sName, !bIgnoreLocal);
};
spreadsheet_api.prototype.asc_getOpeningDocumentsList = function(callback) {
if (!this.broadcastChannel) {
return;
}
let docInfo = this.DocInfo;
let addedMapDocs = {};
if (!window.fBroadcastChannelDocumentInfo) {
window.fBroadcastChannelDocumentInfo = function (event) {
if (event && event.data && event.data.info && event.data.info.id) {
let docId = docInfo.Id + "_" + AscCommon.g_oIdCounter.m_sUserId;
let lastIndexSeparator = event.data.info.id.lastIndexOf("_");
let sentDocId;
if (lastIndexSeparator !== -1) {
sentDocId = event.data.info.id.substring(0, lastIndexSeparator);
}
if ("DocumentInfo" === event.data.type && event.data.info.id !== docId && (!sentDocId || !addedMapDocs[sentDocId])) {
let val = new AscCommonExcel.CWorkbookInfo(event.data.info.name, event.data.info.id);
for (let i in event.data.info.sheets) {
val.addSheet(event.data.info.sheets[i].name, event.data.info.sheets[i].index);
}
addedMapDocs[sentDocId] = 1;
callback([val]);
}
}
};
this.broadcastChannel.addEventListener("message", window.fBroadcastChannelDocumentInfo);
}
this.broadcastChannel.postMessage({
type: "GetOpenedDocuments"
})
};
spreadsheet_api.prototype.sendSheetsToOtherBooks = function(where, arrNames, arrSheets, arrBooks) {
if (!this.broadcastChannel) {
return;
}
let arrBinary = this.getBinaryContentSheets(arrSheets);
if (arrBinary) {
this.broadcastChannel.postMessage({
type: "InsertSheets",
info: {
aBooks: arrBooks,
aSheets: arrBinary,
aNames: arrNames,
where: where
}
})
}
};
spreadsheet_api.prototype.initBroadcastChannel = function() {
if (!this.broadcastChannel) {
if (this.asc_isSupportCopySheetsBetweenBooks()) {
this.broadcastChannel = new BroadcastChannel("onlyofficeChannel");
}
}
};
spreadsheet_api.prototype.asc_isSupportCopySheetsBetweenBooks = function() {
return typeof BroadcastChannel !== "undefined";
};
spreadsheet_api.prototype.closeBroadcastChannel = function() {
if (this.broadcastChannel) {
this.broadcastChannel.close();
this.broadcastChannel = null;
}
};
spreadsheet_api.prototype.initBroadcastChannelListeners = function() {
let oThis = this;
let docInfo = this.DocInfo;
let wb = oThis.wbModel;
let broadcastChannel = this.broadcastChannel;
if (broadcastChannel) {
broadcastChannel.onmessage = function(event) {
if ("GetOpenedDocuments" === event.data.type) {
let sheets = [];
if (wb) {
wb.forEach(function (_ws, _index) {
sheets.push({name: _ws.sName, index: _index});
});
}
broadcastChannel.postMessage({
type: "DocumentInfo",
info: {
id: docInfo.Id + "_" + AscCommon.g_oIdCounter.m_sUserId,
name: docInfo.Title,
sheets: sheets
}
});
}
else if ("InsertSheets" === event.data.type) {
if (wb) {
let docId = docInfo.Id + "_" + AscCommon.g_oIdCounter.m_sUserId;
for (let i in event.data.info.aBooks) {
if (event.data.info.aBooks[i] === docId) {
let where = event.data.info.where != null ? event.data.info.where : (wb.aWorksheets && wb.aWorksheets.length);
oThis.handlers.trigger("asc_generateNewSheetNames", event.data.info.aNames, function (_aNames) {
oThis.asc_EndMoveSheet(where, _aNames, event.data.info.aSheets);
});
}
}
}
}
}
}
};
spreadsheet_api.prototype.asc_SetSmoothScrolling = function(val) {
let wb = this.wb;
if (!wb) {
return;
}
return wb.setSmoothScrolling(val);
};
spreadsheet_api.prototype.asc_GetSmoothScrolling = function() {
let wb = this.wb;
if (!wb) {
return;
}
return wb.getSmoothScrolling();
};
spreadsheet_api.prototype.getCustomProperties = function() {
let oWBModel = this.wbModel;
if(!oWBModel)
return null;
return oWBModel.CustomProperties;
};
spreadsheet_api.prototype.addCustomProperty = function (name, type, value) {
let oCustomProperties = this.getCustomProperties();
if (!oCustomProperties) return;
this.checkObjectsLock([oCustomProperties.Id], function (bNoLock) {
if (bNoLock) {
AscCommon.History.Create_NewPoint();
oCustomProperties.AddProperty(name, type, value);
}
});
};
spreadsheet_api.prototype.modifyCustomProperty = function (idx, name, type, value) {
let oCustomProperties = this.getCustomProperties();
if (!oCustomProperties) return;
this.checkObjectsLock([oCustomProperties.Id], function (bNoLock) {
if (bNoLock) {
AscCommon.History.Create_NewPoint();
oCustomProperties.ModifyProperty(idx, name, type, value);
}
});
};
spreadsheet_api.prototype.removeCustomProperty = function (idx) {
let oCustomProperties = this.getCustomProperties();
if (!oCustomProperties) return;
this.checkObjectsLock([oCustomProperties.Id], function (bNoLock) {
if (bNoLock) {
AscCommon.History.Create_NewPoint();
oCustomProperties.RemoveProperty(idx);
}
});
};
spreadsheet_api.prototype.executeShortcut = function(type)
{
let wb = this.wb;
if (!wb) {
return;
}
return wb.controller.executeShortcut(type);
};
spreadsheet_api.prototype._InitCommonShortcuts = function ()
{
const keyCodes = {
BackSpace : 8,
Tab : 9,
Enter : 13,
Esc : 27,
Space : 32,
PageUp : 33,
PageDown : 34,
End : 35,
Home : 36,
ArrowLeft : 37,
ArrowTop : 38,
ArrowRight : 39,
ArrowBottom : 40,
Digit1 : 49,
Digit2 : 50,
Digit3 : 51,
Digit4 : 52,
Digit5 : 53,
Digit6 : 54,
SemicolonFirefox: 59,
Delete : 46,
EqualFirefox : 61,
A : 65,
B : 66,
C : 67,
E : 69,
I : 73,
J : 74,
K : 75,
L : 76,
M : 77,
P : 80,
R : 82,
S : 83,
U : 85,
V : 86,
X : 88,
Y : 89,
Z : 90,
ContextMenu : 93,
NumpadDecimal : 110,
F2 : 113,
F4 : 115,
F5 : 116,
F9 : 120,
F10 : 121,
NumLock : 144,
ScrollLock : 145,
MinusFirefox : 173,
Semicolon : 186,
Equal : 187,
Comma : 188,
Minus : 189,
Period : 190,
Backquote : 192,
BracketLeft : 219,
BracketRight : 221,
OperaContextMenu: 57351,
}
/*[Asc.c_oAscCellShortcutType.addDate] = [
new CNativeEvent(keyCodes.Semicolon, true, false, false, false),
new CNativeEvent(keyCodes.SemicolonFirefox, true, false, false, false),
];
[Asc.c_oAscCellShortcutType.addTime] = [
new CNativeEvent(keyCodes.Semicolon, true, true, false, false),
new CNativeEvent(keyCodes.SemicolonFirefox, true, true, false, false),
];
[
[Asc.c_oAscCellShortcutType.selectSheet] = [
new CNativeEvent(keyCodes.Space, true, true, false, false),
new CNativeEvent(keyCodes.A, true, false, false, false];
[Asc.c_oAscCellShortcutType.moveToRightEdgeCell] = [
new CNativeEvent(keyCodes.ArrowRight, true, false, false, false),
new CNativeEvent(keyCodes.End, false, false, false, false)
];
[Asc.c_oAscCellShortcutType.selectToRightEdgeCell] = [
new CNativeEvent(keyCodes.ArrowRight, true, true, false, false),
new CNativeEvent(keyCodes.End, false, true, false, false];
[Asc.c_oAscCellShortcutType.addSum,keyCodes.EqualFirefox, false, false, true, false),
new CNativeEvent(keyCodes.EqualFirefox, true, false, true, false, testFlags.macOs),
new CNativeEvent(keyCodes.Equal, false, false, true, false),
new CNativeEvent(keyCodes.Equal, true, false, true, false, testFlags.macOs];*/
// ActionType, Key, Ctrl, Shift, Alt
this.initShortcuts([
[Asc.c_oAscCellShortcutType.refreshAllConnections, keyCodes.F5, true, false, true],
[Asc.c_oAscCellShortcutType.refreshSelectedConnections, keyCodes.F5, false, false, true],
[Asc.c_oAscCellShortcutType.changeFormatTableInfo,keyCodes.R, true, true, false],
[Asc.c_oAscCellShortcutType.calculateAll,keyCodes.F9, false, false, false],
[Asc.c_oAscCellShortcutType.calculateActiveSheet,keyCodes.F9, false, true, false],
[Asc.c_oAscCellShortcutType.focusOnCellEditor,keyCodes.F2, false, false, false],
[Asc.c_oAscCellShortcutType.removeActiveCell,keyCodes.BackSpace, false, false, false],
[Asc.c_oAscCellShortcutType.emptyRange,keyCodes.Delete, false, false, false],
[Asc.c_oAscCellShortcutType.moveActiveCellToLeft,keyCodes.Tab, false, true, false],
[Asc.c_oAscCellShortcutType.moveActiveCellToRight,keyCodes.Tab, false, false, false],
[Asc.c_oAscCellShortcutType.moveActiveCellToDown,keyCodes.Enter, false, false, false],
[Asc.c_oAscCellShortcutType.moveActiveCellToUp,keyCodes.Enter, false, true, false],
[Asc.c_oAscCellShortcutType.reset,keyCodes.Esc, false, false, false],
[Asc.c_oAscCellShortcutType.disableNumLock,keyCodes.NumLock, false, false, false],//opera flags
[Asc.c_oAscCellShortcutType.disableScrollLock,keyCodes.ScrollLock, false, false],//opera flags
[Asc.c_oAscCellShortcutType.selectColumn,keyCodes.Space, false, true, false],
[Asc.c_oAscCellShortcutType.selectRow,keyCodes.Space, true, false, false],
[Asc.c_oAscCellShortcutType.addSeparator,keyCodes.NumpadDecimal, false, false, false],
[Asc.c_oAscCellShortcutType.goToPreviousSheet,keyCodes.PageUp, false, false, true],
[Asc.c_oAscCellShortcutType.moveToUpperCell,keyCodes.PageUp, false, false, false],
[Asc.c_oAscCellShortcutType.selectToUpperCell,keyCodes.PageUp, false, true, false],
[Asc.c_oAscCellShortcutType.moveToTopCell,keyCodes.ArrowTop, true, false, false],
[Asc.c_oAscCellShortcutType.moveToNextSheet,keyCodes.PageDown, false, false, true],
[Asc.c_oAscCellShortcutType.moveToBottomCell,keyCodes.ArrowBottom, true, false, false],
[Asc.c_oAscCellShortcutType.moveToLowerCell,keyCodes.PageDown, false, false, false],
[Asc.c_oAscCellShortcutType.selectToLowerCell,keyCodes.PageDown, false, true, false],
[Asc.c_oAscCellShortcutType.moveToLeftEdgeCell,keyCodes.ArrowLeft, true, false, false],
[Asc.c_oAscCellShortcutType.selectToLeftEdgeCell,keyCodes.ArrowLeft, true, true, false],
[Asc.c_oAscCellShortcutType.moveToLeftCell,keyCodes.ArrowLeft, false, false, false],
[Asc.c_oAscCellShortcutType.selectToLeftCell,keyCodes.ArrowLeft, false, true, false],
[Asc.c_oAscCellShortcutType.moveToRightCell,keyCodes.ArrowRight, false, false, false],
[Asc.c_oAscCellShortcutType.selectToRightCell,keyCodes.ArrowRight, false, true, false],
[Asc.c_oAscCellShortcutType.moveToRightEdgeCell,keyCodes.ArrowRight, true, false, false],
[Asc.c_oAscCellShortcutType.selectToRightEdgeCell,keyCodes.ArrowRight, true, true, false],
[Asc.c_oAscCellShortcutType.selectToTopCell,keyCodes.ArrowTop, true, true, false],
[Asc.c_oAscCellShortcutType.moveToUpCell,keyCodes.ArrowTop, false, false, false],
[Asc.c_oAscCellShortcutType.selectToUpCell,keyCodes.ArrowTop, false, true, false],
[Asc.c_oAscCellShortcutType.selectToBottomCell,keyCodes.ArrowBottom, true, true, false],
[Asc.c_oAscCellShortcutType.moveToDownCell,keyCodes.ArrowBottom, false, false, false],
[Asc.c_oAscCellShortcutType.selectToDownCell,keyCodes.ArrowBottom, false, true, false],
[Asc.c_oAscCellShortcutType.moveToFirstColumn,keyCodes.Home, false, false, false],
[Asc.c_oAscCellShortcutType.selectToFirstColumn,keyCodes.Home, false, true, false],
[Asc.c_oAscCellShortcutType.moveToLeftEdgeTop,keyCodes.Home, true, false, false],
[Asc.c_oAscCellShortcutType.selectToLeftEdgeTop,keyCodes.Home, true, true, false],
[Asc.c_oAscCellShortcutType.moveToRightBottomEdge,keyCodes.End, true, false, false],
[Asc.c_oAscCellShortcutType.selectToRightBottomEdge,keyCodes.End, true, true, false],
[Asc.c_oAscCellShortcutType.setNumberFormat,keyCodes.Digit1, true, true, false],
[Asc.c_oAscCellShortcutType.setTimeFormat,keyCodes.Digit2, true, true, false],
[Asc.c_oAscCellShortcutType.setDateFormat,keyCodes.Digit3, true, true, false],
[Asc.c_oAscCellShortcutType.setCurrencyFormat,keyCodes.Digit4, true, true, false],
[Asc.c_oAscCellShortcutType.setPercentFormat,keyCodes.Digit5, true, true, false],
[Asc.c_oAscCellShortcutType.setStrikethrough,keyCodes.Digit5, true, false, false],
[Asc.c_oAscCellShortcutType.setExponentialFormat,keyCodes.Digit6, true, true, false],
[Asc.c_oAscCellShortcutType.setBold,keyCodes.B, true, false, false],
[Asc.c_oAscCellShortcutType.setItalic,keyCodes.I, true, false, false],
[Asc.c_oAscCellShortcutType.setUnderline,keyCodes.U, true, false, false],
[Asc.c_oAscCellShortcutType.setGeneralFormat,keyCodes.Backquote, true, true, false],
[Asc.c_oAscCellShortcutType.redo,keyCodes.Y, true, false, false],
[Asc.c_oAscCellShortcutType.undo,keyCodes.Z, true, false, false],
[Asc.c_oAscCellShortcutType.print,keyCodes.P, true, false, false],
[Asc.c_oAscCellShortcutType.contextMenu, keyCodes.ContextMenu, false, false, false],
[Asc.c_oAscCellShortcutType.showFilterOptions, keyCodes.ArrowBottom, false, false, true],
[Asc.c_oAscCellShortcutType.showAutoComplete, keyCodes.ArrowBottom, false, false, true],
[Asc.c_oAscCellShortcutType.showDataValidation, keyCodes.ArrowBottom, false, false, true],
[Asc.c_oAscCellShortcutType.increaseFontSize, keyCodes.BracketRight, true, false, false],
[Asc.c_oAscCellShortcutType.decreaseFontSize, keyCodes.BracketLeft, true, false, false]
]);
}
spreadsheet_api.prototype._InitWindowsShortcuts = function () {
// ActionType, Key, Ctrl, Shift, Alt
this.initShortcuts([]);
}
spreadsheet_api.prototype._InitMacOsShortcuts = function () {
// ActionType, Key, Ctrl, Shift, Alt
this.initShortcuts([]);
}
spreadsheet_api.prototype.initDefaultShortcuts = function () {
this._InitCommonShortcuts();
if (AscCommon.AscBrowser.isMacOs) {
this._InitMacOsShortcuts();
} else {
this._InitWindowsShortcuts();
}
};
spreadsheet_api.prototype.asc_SetShowVerticalScroll = function (val) {
let wb = this.wb;
if (!wb) {
return;
}
return wb.setShowVerticalScroll(val);
};
spreadsheet_api.prototype.asc_GetShowVerticalScroll = function () {
let wb = this.wb;
if (!wb) {
return;
}
return wb.getShowVerticalScroll();
};
spreadsheet_api.prototype.asc_SetShowHorizontalScroll = function (val) {
let wb = this.wb;
if (!wb) {
return;
}
return wb.setShowHorizontalScroll(val);
};
spreadsheet_api.prototype.asc_GetShowHorizontalScroll = function () {
let wb = this.wb;
if (!wb) {
return;
}
return wb.getShowHorizontalScroll();
};
spreadsheet_api.prototype.haveInks = function() {
if (!this.wbModel) {
return false;
}
return !!this.wbModel.getAllInks().length;
};
spreadsheet_api.prototype.removeAllInks = function() {
if (!this.wb) {
return;
}
this.wb.removeAllInks();
};
/*
* Export
* -----------------------------------------------------------------------------
*/
asc["spreadsheet_api"] = asc.spreadsheet_api = spreadsheet_api;
prot = spreadsheet_api.prototype;
prot["asc_GetFontThumbnailsPath"] = prot.asc_GetFontThumbnailsPath;
prot["asc_setDocInfo"] = prot.asc_setDocInfo;
prot["asc_changeDocInfo"] = prot.asc_changeDocInfo;
prot['asc_getFunctionArgumentSeparator'] = prot.asc_getFunctionArgumentSeparator;
prot['asc_getCurrencySymbols'] = prot.asc_getCurrencySymbols;
prot['asc_getAdditionalCurrencySymbols'] = prot.asc_getAdditionalCurrencySymbols;
prot['asc_getLocaleExample'] = prot.asc_getLocaleExample;
prot['asc_convertNumFormatLocal2NumFormat'] = prot.asc_convertNumFormatLocal2NumFormat;
prot['asc_convertNumFormat2NumFormatLocal'] = prot.asc_convertNumFormat2NumFormatLocal;
prot['asc_getFormatCells'] = prot.asc_getFormatCells;
prot["asc_getLocaleCurrency"] = prot.asc_getLocaleCurrency;
prot["asc_setLocale"] = prot.asc_setLocale;
prot["asc_getLocale"] = prot.asc_getLocale;
prot["asc_getDecimalSeparator"] = prot.asc_getDecimalSeparator;
prot["asc_getGroupSeparator"] = prot.asc_getGroupSeparator;
prot["asc_getFrozenPaneBorderType"] = prot.asc_getFrozenPaneBorderType;
prot["asc_setFrozenPaneBorderType"] = prot.asc_setFrozenPaneBorderType;
prot["asc_getEditorPermissions"] = prot.asc_getEditorPermissions;
prot["asc_LoadDocument"] = prot.asc_LoadDocument;
prot["asc_DownloadAs"] = prot.asc_DownloadAs;
prot["asc_Save"] = prot.asc_Save;
prot["forceSave"] = prot.forceSave;
prot["asc_setIsForceSaveOnUserSave"] = prot.asc_setIsForceSaveOnUserSave;
prot["asc_Resize"] = prot.asc_Resize;
prot["asc_Copy"] = prot.asc_Copy;
prot["asc_Paste"] = prot.asc_Paste;
prot["asc_SpecialPaste"] = prot.asc_SpecialPaste;
prot["asc_Cut"] = prot.asc_Cut;
prot["asc_Undo"] = prot.asc_Undo;
prot["asc_Redo"] = prot.asc_Redo;
prot["asc_TextImport"] = prot.asc_TextImport;
prot["asc_TextToColumns"] = prot.asc_TextToColumns;
prot["asc_TextFromFileOrUrl"] = prot.asc_TextFromFileOrUrl;
prot["asc_getCSVDelimiter"] = prot.asc_getCSVDelimiter;
prot["asc_initPrintPreview"] = prot.asc_initPrintPreview;
prot["asc_updatePrintPreview"] = prot.asc_updatePrintPreview;
prot["asc_drawPrintPreview"] = prot.asc_drawPrintPreview;
prot["asc_closePrintPreview"] = prot.asc_closePrintPreview;
prot["asc_getDocumentName"] = prot.asc_getDocumentName;
prot["asc_getAppProps"] = prot.asc_getAppProps;
prot["asc_getCoreProps"] = prot.asc_getCoreProps;
prot["asc_setCoreProps"] = prot.asc_setCoreProps;
prot["asc_isDocumentModified"] = prot.asc_isDocumentModified;
prot["SetDocumentModified"] = prot.SetDocumentModified;
prot["isDocumentModified"] = prot.isDocumentModified;
prot["asc_isDocumentCanSave"] = prot.asc_isDocumentCanSave;
prot["asc_getCanUndo"] = prot.asc_getCanUndo;
prot["asc_getCanRedo"] = prot.asc_getCanRedo;
prot["can_CopyCut"] = prot.can_CopyCut;
prot["asc_setAutoSaveGap"] = prot.asc_setAutoSaveGap;
prot["asc_setViewMode"] = prot.asc_setViewMode;
prot["asc_setFilteringMode"] = prot.asc_setFilteringMode;
prot["asc_setAdvancedOptions"] = prot.asc_setAdvancedOptions;
prot["asc_setPageOptions"] = prot.asc_setPageOptions;
prot["asc_savePagePrintOptions"] = prot.asc_savePagePrintOptions;
prot["asc_getPageOptions"] = prot.asc_getPageOptions;
prot["asc_changeDocSize"] = prot.asc_changeDocSize;
prot["asc_changePageMargins"] = prot.asc_changePageMargins;
prot["asc_setPageOption"] = prot.asc_setPageOption;
prot["asc_changePageOrient"] = prot.asc_changePageOrient;
prot["asc_changePrintTitles"] = prot.asc_changePrintTitles;
prot["asc_getPrintTitlesRange"] = prot.asc_getPrintTitlesRange;
prot["asc_SetPrintHeadings"] = prot.asc_SetPrintHeadings;
prot["asc_SetPrintGridlines"] = prot.asc_SetPrintGridlines;
prot["asc_ChangePrintArea"] = prot.asc_ChangePrintArea;
prot["asc_CanAddPrintArea"] = prot.asc_CanAddPrintArea;
prot["asc_SetPrintScale"] = prot.asc_SetPrintScale;
prot["asc_decodeBuffer"] = prot.asc_decodeBuffer;
prot["asc_registerCallback"] = prot.asc_registerCallback;
prot["asc_unregisterCallback"] = prot.asc_unregisterCallback;
prot["asc_changeArtImageFromFile"] = prot.asc_changeArtImageFromFile;
prot["asc_SetDocumentPlaceChangedEnabled"] = prot.asc_SetDocumentPlaceChangedEnabled;
prot["asc_SetFastCollaborative"] = prot.asc_SetFastCollaborative;
prot["asc_setThumbnailStylesSizes"] = prot.asc_setThumbnailStylesSizes;
// Workbook interface
prot["asc_getWorksheetsCount"] = prot.asc_getWorksheetsCount;
prot["asc_getWorksheetName"] = prot.asc_getWorksheetName;
prot["asc_getWorksheetTabColor"] = prot.asc_getWorksheetTabColor;
prot["asc_setWorksheetTabColor"] = prot.asc_setWorksheetTabColor;
prot["asc_getActiveWorksheetIndex"] = prot.asc_getActiveWorksheetIndex;
prot["asc_getActiveWorksheetId"] = prot.asc_getActiveWorksheetId;
prot["asc_getWorksheetId"] = prot.asc_getWorksheetId;
prot["asc_isWorksheetHidden"] = prot.asc_isWorksheetHidden;
prot["asc_isWorksheetLockedOrDeleted"] = prot.asc_isWorksheetLockedOrDeleted;
prot["asc_isWorkbookLocked"] = prot.asc_isWorkbookLocked;
prot["asc_isLayoutLocked"] = prot.asc_isLayoutLocked;
prot["asc_isPrintAreaLocked"] = prot.asc_isPrintAreaLocked;
prot["asc_isHeaderFooterLocked"] = prot.asc_isHeaderFooterLocked;
prot["asc_getHiddenWorksheets"] = prot.asc_getHiddenWorksheets;
prot["asc_showWorksheet"] = prot.asc_showWorksheet;
prot["asc_hideWorksheet"] = prot.asc_hideWorksheet;
prot["asc_renameWorksheet"] = prot.asc_renameWorksheet;
prot["asc_addWorksheet"] = prot.asc_addWorksheet;
prot["asc_insertWorksheet"] = prot.asc_insertWorksheet;
prot["asc_deleteWorksheet"] = prot.asc_deleteWorksheet;
prot["asc_moveWorksheet"] = prot.asc_moveWorksheet;
prot["asc_copyWorksheet"] = prot.asc_copyWorksheet;
prot["asc_cleanSelection"] = prot.asc_cleanSelection;
prot["asc_getZoom"] = prot.asc_getZoom;
prot["asc_setZoom"] = prot.asc_setZoom;
prot["asc_enableKeyEvents"] = prot.asc_enableKeyEvents;
prot["asc_findText"] = prot.asc_findText;
prot["asc_replaceText"] = prot.asc_replaceText;
prot["asc_endFindText"] = prot.asc_endFindText;
prot["asc_findCell"] = prot.asc_findCell;
prot["asc_StartTextAroundSearch"] = prot.asc_StartTextAroundSearch;
prot["asc_SelectSearchElement"] = prot.asc_SelectSearchElement;
prot["asc_closeCellEditor"] = prot.asc_closeCellEditor;
prot["asc_StartMoveSheet"] = prot.asc_StartMoveSheet;
prot["asc_EndMoveSheet"] = prot.asc_EndMoveSheet;
prot["asc_setWorksheetRange"] = prot.asc_setWorksheetRange;
prot["asc_setR1C1Mode"] = prot.asc_setR1C1Mode;
prot["asc_getR1C1Mode"] = prot.asc_getR1C1Mode;
prot["asc_setIncludeNewRowColTable"] = prot.asc_setIncludeNewRowColTable;
prot["asc_setShowZeroCellValues"] = prot.asc_setShowZeroCellValues;
prot["asc_SetAutoCorrectHyperlinks"] = prot.asc_SetAutoCorrectHyperlinks;
// Spreadsheet interface
prot["asc_getColumnWidth"] = prot.asc_getColumnWidth;
prot["asc_setColumnWidth"] = prot.asc_setColumnWidth;
prot["asc_showColumns"] = prot.asc_showColumns;
prot["asc_hideColumns"] = prot.asc_hideColumns;
prot["asc_autoFitColumnWidth"] = prot.asc_autoFitColumnWidth;
prot["asc_getRowHeight"] = prot.asc_getRowHeight;
prot["asc_setRowHeight"] = prot.asc_setRowHeight;
prot["asc_autoFitRowHeight"] = prot.asc_autoFitRowHeight;
prot["asc_showRows"] = prot.asc_showRows;
prot["asc_hideRows"] = prot.asc_hideRows;
prot["asc_insertCells"] = prot.asc_insertCells;
prot["asc_deleteCells"] = prot.asc_deleteCells;
prot["asc_mergeCells"] = prot.asc_mergeCells;
prot["asc_sortCells"] = prot.asc_sortCells;
prot["asc_emptyCells"] = prot.asc_emptyCells;
prot["asc_mergeCellsDataLost"] = prot.asc_mergeCellsDataLost;
prot["asc_sortCellsRangeExpand"] = prot.asc_sortCellsRangeExpand;
prot["asc_getSheetViewSettings"] = prot.asc_getSheetViewSettings;
prot["asc_setDisplayGridlines"] = prot.asc_setDisplayGridlines;
prot["asc_setDisplayHeadings"] = prot.asc_setDisplayHeadings;
prot["asc_setShowZeros"] = prot.asc_setShowZeros;
prot["asc_setShowFormulas"] = prot.asc_setShowFormulas;
prot["asc_getShowFormulas"] = prot.asc_getShowFormulas;
prot["asc_setRightToLeft"] = prot.asc_setRightToLeft;
prot["asc_setDefaultDirection"] = prot.asc_setDefaultDirection;
// Defined Names
prot["asc_getDefinedNames"] = prot.asc_getDefinedNames;
prot["asc_setDefinedNames"] = prot.asc_setDefinedNames;
prot["asc_editDefinedNames"] = prot.asc_editDefinedNames;
prot["asc_delDefinedNames"] = prot.asc_delDefinedNames;
prot["asc_getDefaultDefinedName"] = prot.asc_getDefaultDefinedName;
prot["asc_checkDefinedName"] = prot.asc_checkDefinedName;
// Ole Editor
prot["asc_toggleChangeVisibleAreaOleEditor"] = prot.asc_toggleChangeVisibleAreaOleEditor;
prot["asc_toggleShowVisibleAreaOleEditor"] = prot.asc_toggleShowVisibleAreaOleEditor;
prot["asc_addOleObjectAction"] = prot.asc_addOleObjectAction;
prot["asc_addTableOleObjectInOleEditor"] = prot.asc_addTableOleObjectInOleEditor;
prot["asc_getBinaryInfoOleObject"] = prot.asc_getBinaryInfoOleObject;
prot["asc_editOleObjectAction"] = prot.asc_editOleObjectAction;
prot["asc_doubleClickOnTableOleObject"] = prot.asc_doubleClickOnTableOleObject;
prot["asc_startEditCurrentOleObject"] = prot.asc_startEditCurrentOleObject;
// Auto filters interface + format as table
prot["asc_addAutoFilter"] = prot.asc_addAutoFilter;
prot["asc_changeAutoFilter"] = prot.asc_changeAutoFilter;
prot["asc_applyAutoFilter"] = prot.asc_applyAutoFilter;
prot["asc_applyAutoFilterByType"] = prot.asc_applyAutoFilterByType;
prot["asc_reapplyAutoFilter"] = prot.asc_reapplyAutoFilter;
prot["asc_sortColFilter"] = prot.asc_sortColFilter;
prot["asc_getAddFormatTableOptions"] = prot.asc_getAddFormatTableOptions;
prot["asc_clearFilter"] = prot.asc_clearFilter;
prot["asc_clearFilterColumn"] = prot.asc_clearFilterColumn;
prot["asc_changeSelectionFormatTable"] = prot.asc_changeSelectionFormatTable;
prot["asc_changeFormatTableInfo"] = prot.asc_changeFormatTableInfo;
prot["asc_insertCellsInTable"] = prot.asc_insertCellsInTable;
prot["asc_deleteCellsInTable"] = prot.asc_deleteCellsInTable;
prot["asc_changeDisplayNameTable"] = prot.asc_changeDisplayNameTable;
prot["asc_changeTableRange"] = prot.asc_changeTableRange;
prot["asc_convertTableToRange"] = prot.asc_convertTableToRange;
prot["asc_getTablePictures"] = prot.asc_getTablePictures;
prot["asc_getSlicerPictures"] = prot.asc_getSlicerPictures;
prot["asc_getDefaultTableStyle"] = prot.asc_getDefaultTableStyle;
prot["asc_applyAutoCorrectOptions"] = prot.asc_applyAutoCorrectOptions;
//Group data
prot["asc_group"] = prot.asc_group;
prot["asc_ungroup"] = prot.asc_ungroup;
prot["asc_canGroupPivot"] = prot.asc_canGroupPivot;
prot["asc_groupPivot"] = prot.asc_groupPivot;
prot["asc_ungroupPivot"] = prot.asc_ungroupPivot;
prot["asc_clearOutline"] = prot.asc_clearOutline;
prot["asc_changeGroupDetails"] = prot.asc_changeGroupDetails;
prot["asc_checkAddGroup"] = prot.asc_checkAddGroup;
prot["asc_setGroupSummary"] = prot.asc_setGroupSummary;
prot["asc_getGroupSummaryRight"] = prot.asc_getGroupSummaryRight;
prot["asc_getGroupSummaryBelow"] = prot.asc_getGroupSummaryBelow;
// Drawing objects interface
prot["asc_showDrawingObjects"] = prot.asc_showDrawingObjects;
prot["asc_drawingObjectsExist"] = prot.asc_drawingObjectsExist;
prot["asc_getChartObject"] = prot.asc_getChartObject;
prot["asc_addChartDrawingObject"] = prot.asc_addChartDrawingObject;
prot["asc_editChartDrawingObject"] = prot.asc_editChartDrawingObject;
prot["asc_getRecommendedChartData"] = prot.asc_getRecommendedChartData;
prot["asc_getChartData"] = prot.asc_getChartData;
prot["asc_addChartSpace"] = prot.asc_addChartSpace;
prot["asc_addImageDrawingObject"] = prot.asc_addImageDrawingObject;
prot["asc_getCurrentDrawingMacrosName"] = prot.asc_getCurrentDrawingMacrosName;
prot["asc_assignMacrosToCurrentDrawing"] = prot.asc_assignMacrosToCurrentDrawing;
prot["asc_setSelectedDrawingObjectLayer"] = prot.asc_setSelectedDrawingObjectLayer;
prot["asc_setSelectedDrawingObjectAlign"] = prot.asc_setSelectedDrawingObjectAlign;
prot["asc_DistributeSelectedDrawingObjectHor"] = prot.asc_DistributeSelectedDrawingObjectHor;
prot["asc_DistributeSelectedDrawingObjectVer"] = prot.asc_DistributeSelectedDrawingObjectVer;
prot["asc_getSelectedDrawingObjectsCount"] = prot.asc_getSelectedDrawingObjectsCount;
prot["SetDrawImagePreviewBulletForMenu"] = prot.SetDrawImagePreviewBulletForMenu;
prot["asc_getChartPreviews"] = prot.asc_getChartPreviews;
prot["asc_getTextArtPreviews"] = prot.asc_getTextArtPreviews;
prot['asc_getPropertyEditorShapes'] = prot.asc_getPropertyEditorShapes;
prot['asc_getPropertyEditorTextArts'] = prot.asc_getPropertyEditorTextArts;
prot["asc_checkDataRange"] = prot.asc_checkDataRange;
prot["asc_getBinaryFileWriter"] = prot.asc_getBinaryFileWriter;
prot["asc_getWordChartObject"] = prot.asc_getWordChartObject;
prot["asc_cleanWorksheet"] = prot.asc_cleanWorksheet;
prot["asc_showImageFileDialog"] = prot.asc_showImageFileDialog;
prot["asc_addImage"] = prot.asc_addImage;
prot["asc_setData"] = prot.asc_setData;
prot["asc_getData"] = prot.asc_getData;
prot["asc_onCloseChartFrame"] = prot.asc_onCloseChartFrame;
// Cell comment interface
prot["asc_addComment"] = prot.asc_addComment;
prot["asc_changeComment"] = prot.asc_changeComment;
prot["asc_findComment"] = prot.asc_findComment;
prot["asc_removeComment"] = prot.asc_removeComment;
prot["asc_RemoveAllComments"] = prot.asc_RemoveAllComments;
prot["asc_GetCommentLogicPosition"] = prot.asc_GetCommentLogicPosition;
prot["asc_ResolveAllComments"] = prot.asc_ResolveAllComments;
prot["asc_showComment"] = prot.asc_showComment;
prot["asc_selectComment"] = prot.asc_selectComment;
prot["asc_showComments"] = prot.asc_showComments;
prot["asc_hideComments"] = prot.asc_hideComments;
// Shapes
prot["setStartPointHistory"] = prot.setStartPointHistory;
prot["setEndPointHistory"] = prot.setEndPointHistory;
prot["asc_startAddShape"] = prot.asc_startAddShape;
prot["asc_endAddShape"] = prot.asc_endAddShape;
prot["asc_addShapeOnSheet"] = prot.asc_addShapeOnSheet;
prot["asc_canEditGeometry"] = prot.asc_canEditGeometry;
prot["asc_editPointsGeometry"] = prot.asc_editPointsGeometry;
prot["asc_isAddAutoshape"] = prot.asc_isAddAutoshape;
prot["asc_canAddShapeHyperlink"] = prot.asc_canAddShapeHyperlink;
prot["asc_canGroupGraphicsObjects"] = prot.asc_canGroupGraphicsObjects;
prot["asc_groupGraphicsObjects"] = prot.asc_groupGraphicsObjects;
prot["asc_canUnGroupGraphicsObjects"] = prot.asc_canUnGroupGraphicsObjects;
prot["asc_unGroupGraphicsObjects"] = prot.asc_unGroupGraphicsObjects;
prot["asc_canMergeSelectedShapes"] = prot.asc_canMergeSelectedShapes;
prot["asc_getGraphicObjectProps"] = prot.asc_getGraphicObjectProps;
prot["asc_GetSelectedText"] = prot.asc_GetSelectedText;
prot["asc_setGraphicObjectProps"] = prot.asc_setGraphicObjectProps;
prot["asc_getOriginalImageSize"] = prot.asc_getOriginalImageSize;
prot["asc_changeShapeType"] = prot.asc_changeShapeType;
prot["asc_setInterfaceDrawImagePlaceShape"] = prot.asc_setInterfaceDrawImagePlaceShape;
prot["asc_setInterfaceDrawImagePlaceTextArt"] = prot.asc_setInterfaceDrawImagePlaceTextArt;
prot["asc_changeImageFromFile"] = prot.asc_changeImageFromFile;
prot["asc_putPrLineSpacing"] = prot.asc_putPrLineSpacing;
prot["asc_addTextArt"] = prot.asc_addTextArt;
prot["asc_canEditCrop"] = prot.asc_canEditCrop;
prot["asc_startEditCrop"] = prot.asc_startEditCrop;
prot["asc_endEditCrop"] = prot.asc_endEditCrop;
prot["asc_cropFit"] = prot.asc_cropFit;
prot["asc_cropFill"] = prot.asc_cropFill;
prot["asc_putLineSpacingBeforeAfter"] = prot.asc_putLineSpacingBeforeAfter;
prot["asc_setDrawImagePlaceParagraph"] = prot.asc_setDrawImagePlaceParagraph;
prot["asc_changeShapeImageFromFile"] = prot.asc_changeShapeImageFromFile;
prot["asc_AddMath"] = prot.asc_AddMath;
prot["asc_ConvertMathView"] = prot.asc_ConvertMathView;
prot["asc_SetMathProps"] = prot.asc_SetMathProps;
//----------------------------------------------------------------------------------------------------------------------
// Spellcheck
prot["asc_setDefaultLanguage"] = prot.asc_setDefaultLanguage;
prot["asc_nextWord"] = prot.asc_nextWord;
prot["asc_replaceMisspelledWord"]= prot.asc_replaceMisspelledWord;
prot["asc_ignoreMisspelledWord"] = prot.asc_ignoreMisspelledWord;
prot["asc_spellCheckAddToDictionary"] = prot.asc_spellCheckAddToDictionary;
prot["asc_spellCheckClearDictionary"] = prot.asc_spellCheckClearDictionary;
prot["asc_cancelSpellCheck"] = prot.asc_cancelSpellCheck;
prot["asc_ignoreNumbers"] = prot.asc_ignoreNumbers;
prot["asc_ignoreUppercase"] = prot.asc_ignoreUppercase;
prot["asc_getKeyboardLanguage"] = prot.asc_getKeyboardLanguage;
prot["asc_getInputLanguage"] = prot.asc_getInputLanguage;
// Frozen pane
prot["asc_freezePane"] = prot.asc_freezePane;
// Sparklines
prot["asc_setSparklineGroup"] = prot.asc_setSparklineGroup;
prot["asc_addSparklineGroup"] = prot.asc_addSparklineGroup;
// Cell interface
prot["asc_getCellInfo"] = prot.asc_getCellInfo;
prot["asc_getActiveCellCoord"] = prot.asc_getActiveCellCoord;
prot["asc_getAnchorPosition"] = prot.asc_getAnchorPosition;
prot["asc_setCellFontName"] = prot.asc_setCellFontName;
prot["asc_setCellFontSize"] = prot.asc_setCellFontSize;
prot["asc_setCellBold"] = prot.asc_setCellBold;
prot["asc_setCellItalic"] = prot.asc_setCellItalic;
prot["asc_setCellUnderline"] = prot.asc_setCellUnderline;
prot["asc_setCellStrikeout"] = prot.asc_setCellStrikeout;
prot["asc_setCellSubscript"] = prot.asc_setCellSubscript;
prot["asc_setCellSuperscript"] = prot.asc_setCellSuperscript;
prot["asc_setCellAlign"] = prot.asc_setCellAlign;
prot["asc_setCellVertAlign"] = prot.asc_setCellVertAlign;
prot["asc_setCellTextWrap"] = prot.asc_setCellTextWrap;
prot["asc_setCellTextShrink"] = prot.asc_setCellTextShrink;
prot["asc_setCellTextColor"] = prot.asc_setCellTextColor;
prot["asc_setCellFill"] = prot.asc_setCellFill;
prot["asc_setCellBackgroundColor"] = prot.asc_setCellBackgroundColor;
prot["asc_setCellBorders"] = prot.asc_setCellBorders;
prot["asc_setCellFormat"] = prot.asc_setCellFormat;
prot["asc_setCellAngle"] = prot.asc_setCellAngle;
prot["asc_setCellStyle"] = prot.asc_setCellStyle;
prot["asc_increaseCellDigitNumbers"] = prot.asc_increaseCellDigitNumbers;
prot["asc_decreaseCellDigitNumbers"] = prot.asc_decreaseCellDigitNumbers;
prot["asc_increaseFontSize"] = prot.asc_increaseFontSize;
prot["asc_decreaseFontSize"] = prot.asc_decreaseFontSize;
prot["asc_setCellIndent"] = prot.asc_setCellIndent;
prot["asc_setCellProtection"] = prot.asc_setCellProtection;
prot["asc_setCellLocked"] = prot.asc_setCellLocked;
prot["asc_setCellHiddenFormulas"] = prot.asc_setCellHiddenFormulas;
prot["asc_checkProtectedRange"] = prot.asc_checkProtectedRange;
prot["asc_checkActiveCellPassword"] = prot.asc_checkActiveCellPassword;
prot["asc_checkLockedCells"] = prot.asc_checkLockedCells;
prot["asc_formatPainter"] = prot.asc_formatPainter;
prot["asc_showAutoComplete"] = prot.asc_showAutoComplete;
prot["asc_getHeaderFooterMode"] = prot.asc_getHeaderFooterMode;
prot["asc_getActiveRangeStr"] = prot.asc_getActiveRangeStr;
prot["asc_getActiveRange"] = prot.asc_getActiveRange;
prot["asc_onMouseUp"] = prot.asc_onMouseUp;
prot["asc_selectFunction"] = prot.asc_selectFunction;
prot["asc_insertHyperlink"] = prot.asc_insertHyperlink;
prot["asc_removeHyperlink"] = prot.asc_removeHyperlink;
prot["asc_getFullHyperlinkLength"] = prot.asc_getFullHyperlinkLength;
prot["asc_cleanSelectRange"] = prot.asc_cleanSelectRange;
prot["asc_insertInCell"] = prot.asc_insertInCell;
prot["asc_getFormulasInfo"] = prot.asc_getFormulasInfo;
prot["asc_getFormulaLocaleName"] = prot.asc_getFormulaLocaleName;
prot["asc_getFormulaNameByLocale"] = prot.asc_getFormulaNameByLocale;
prot["asc_startWizard"] = prot.asc_startWizard;
prot["asc_canEnterWizardRange"] = prot.asc_canEnterWizardRange;
prot["asc_insertArgumentsInFormula"] = prot.asc_insertArgumentsInFormula;
prot["asc_calculate"] = prot.asc_calculate;
prot["asc_setFontRenderingMode"] = prot.asc_setFontRenderingMode;
prot["asc_setSelectionDialogMode"] = prot.asc_setSelectionDialogMode;
prot["asc_ChangeColorScheme"] = prot.asc_ChangeColorScheme;
prot["asc_ChangeColorSchemeByIdx"] = prot.asc_ChangeColorSchemeByIdx;
prot["asc_setListType"] = prot.asc_setListType;
prot["asc_getCurrentListType"] = prot.asc_getCurrentListType;
/////////////////////////////////////////////////////////////////////////
///////////////////CoAuthoring and Chat api//////////////////////////////
/////////////////////////////////////////////////////////////////////////
prot["asc_coAuthoringChatSendMessage"] = prot.asc_coAuthoringChatSendMessage;
prot["asc_coAuthoringGetUsers"] = prot.asc_coAuthoringGetUsers;
prot["asc_coAuthoringChatGetMessages"] = prot.asc_coAuthoringChatGetMessages;
prot["asc_coAuthoringDisconnect"] = prot.asc_coAuthoringDisconnect;
// other
prot["asc_stopSaving"] = prot.asc_stopSaving;
prot["asc_continueSaving"] = prot.asc_continueSaving;
prot['sendEvent'] = prot.sendEvent;
// Version History
prot["asc_undoAllChanges"] = prot.asc_undoAllChanges;
prot["asc_setLocalization"] = prot.asc_setLocalization;
// native
prot["asc_nativeOpenFile"] = prot.asc_nativeOpenFile;
prot["asc_nativeCalculateFile"] = prot.asc_nativeCalculateFile;
prot["asc_nativeApplyChanges"] = prot.asc_nativeApplyChanges;
prot["asc_nativeApplyChanges2"] = prot.asc_nativeApplyChanges2;
prot["asc_nativeGetFile"] = prot.asc_nativeGetFile;
prot["asc_nativeGetFileData"] = prot.asc_nativeGetFileData;
prot["asc_nativeCalculate"] = prot.asc_nativeCalculate;
prot["asc_nativePrint"] = prot.asc_nativePrint;
prot["asc_nativePrintPagesCount"] = prot.asc_nativePrintPagesCount;
prot["asc_nativeGetPDF"] = prot.asc_nativeGetPDF;
prot['asc_isOffline'] = prot.asc_isOffline;
prot['asc_getUrlType'] = prot.asc_getUrlType;
prot['asc_prepareUrl'] = prot.asc_prepareUrl;
prot['asc_getSessionToken'] = prot.asc_getSessionToken;
// Builder
prot['asc_nativeInitBuilder'] = prot.asc_nativeInitBuilder;
prot['asc_SetSilentMode'] = prot.asc_SetSilentMode;
// plugins
prot["asc_pluginsRegister"] = prot.asc_pluginsRegister;
prot["asc_pluginRun"] = prot.asc_pluginRun;
prot["asc_pluginStop"] = prot.asc_pluginStop;
prot["asc_pluginResize"] = prot.asc_pluginResize;
prot["asc_pluginButtonClick"] = prot.asc_pluginButtonClick;
prot["asc_startEditCurrentOleObject"] = prot.asc_startEditCurrentOleObject;
prot["asc_pluginEnableMouseEvents"] = prot.asc_pluginEnableMouseEvents;
// system input
prot["SetTextBoxInputMode"] = prot.SetTextBoxInputMode;
prot["GetTextBoxInputMode"] = prot.GetTextBoxInputMode;
prot["asc_InputClearKeyboardElement"] = prot.asc_InputClearKeyboardElement;
prot["asc_OnHideContextMenu"] = prot.asc_OnHideContextMenu;
prot["asc_OnShowContextMenu"] = prot.asc_OnShowContextMenu;
// pivot
prot["asc_getAddPivotTableOptions"] = prot.asc_getAddPivotTableOptions;
prot["asc_insertPivotNewWorksheet"] = prot.asc_insertPivotNewWorksheet;
prot["asc_insertPivotExistingWorksheet"] = prot.asc_insertPivotExistingWorksheet;
prot["asc_refreshAllPivots"] = prot.asc_refreshAllPivots;
prot["asc_getPivotInfo"] = prot.asc_getPivotInfo;
prot["asc_getPivotShowValueAsInfo"] = prot.asc_getPivotShowValueAsInfo;
prot["asc_pivotShowDetails"] = prot.asc_pivotShowDetails;
prot["asc_pivotShowDetailsHeader"] = prot.asc_pivotShowDetailsHeader;
// signatures
prot["asc_addSignatureLine"] = prot.asc_addSignatureLine;
prot["asc_CallSignatureDblClickEvent"] = prot.asc_CallSignatureDblClickEvent;
prot["asc_getRequestSignatures"] = prot.asc_getRequestSignatures;
prot["asc_AddSignatureLine2"] = prot.asc_AddSignatureLine2;
prot["asc_Sign"] = prot.asc_Sign;
prot["asc_RequestSign"] = prot.asc_RequestSign;
prot["asc_ViewCertificate"] = prot.asc_ViewCertificate;
prot["asc_SelectCertificate"] = prot.asc_SelectCertificate;
prot["asc_GetDefaultCertificate"] = prot.asc_GetDefaultCertificate;
prot["asc_getSignatures"] = prot.asc_getSignatures;
prot["asc_isSignaturesSupport"] = prot.asc_isSignaturesSupport;
prot["asc_isProtectionSupport"] = prot.asc_isProtectionSupport;
prot["asc_isAnonymousSupport"] = prot.asc_isAnonymousSupport;
prot["asc_RemoveSignature"] = prot.asc_RemoveSignature;
prot["asc_RemoveAllSignatures"] = prot.asc_RemoveAllSignatures;
prot["asc_gotoSignature"] = prot.asc_gotoSignature;
prot["asc_getSignatureSetup"] = prot.asc_getSignatureSetup;
// mobile
prot["asc_Remove"] = prot.asc_Remove;
prot["asc_getSortProps"] = prot.asc_getSortProps;
prot["asc_setSortProps"] = prot.asc_setSortProps;
prot["asc_validSheetName"] = prot.asc_validSheetName;
prot["asc_getRemoveDuplicates"] = prot.asc_getRemoveDuplicates;
prot["asc_setRemoveDuplicates"] = prot.asc_setRemoveDuplicates;
//conditional formatting
prot["asc_getCF"] = prot.asc_getCF;
prot["asc_setCF"] = prot.asc_setCF;
prot["asc_getPreviewCF"] = prot.asc_getPreviewCF;
prot["asc_clearCF"] = prot.asc_clearCF;
prot["asc_getCFIconsByType"] = prot.asc_getCFIconsByType;
prot["asc_getCFPresets"] = prot.asc_getCFPresets;
prot["asc_getFullCFIcons"] = prot.asc_getFullCFIcons;
prot["asc_isValidDataRefCf"] = prot.asc_isValidDataRefCf;
prot["asc_beforeInsertSlicer"] = prot.asc_beforeInsertSlicer;
prot["asc_insertSlicer"] = prot.asc_insertSlicer;
//data validation
prot["asc_setDataValidation"] = prot.asc_setDataValidation;
prot["asc_getDataValidationProps"] = prot.asc_getDataValidationProps;
prot["asc_getEscapeSheetName"] = prot.asc_getEscapeSheetName;
prot["asc_ConvertEquationToMath"] = prot.asc_ConvertEquationToMath;
prot["asc_getProtectedRanges"] = prot.asc_getProtectedRanges;
prot["asc_setProtectedRanges"] = prot.asc_setProtectedRanges;
prot["asc_checkProtectedRangesPassword"] = prot.asc_checkProtectedRangesPassword;
prot["asc_checkProtectedRangeName"] = prot.asc_checkProtectedRangeName;
prot["asc_getProtectedSheet"] = prot.asc_getProtectedSheet;
prot["asc_setProtectedSheet"] = prot.asc_setProtectedSheet;
prot["asc_isProtectedSheet"] = prot.asc_isProtectedSheet;
prot["asc_getProtectedWorkbook"] = prot.asc_getProtectedWorkbook;
prot["asc_setProtectedWorkbook"] = prot.asc_setProtectedWorkbook;
prot["asc_isProtectedWorkbook"] = prot.asc_isProtectedWorkbook;
//sheet-views
prot["asc_addNamedSheetView"] = prot.asc_addNamedSheetView;
prot["asc_getNamedSheetViews"] = prot.asc_getNamedSheetViews;
prot["asc_deleteNamedSheetViews"] = prot.asc_deleteNamedSheetViews;
prot["asc_setActiveNamedSheetView"] = prot.asc_setActiveNamedSheetView;
prot["asc_getActiveNamedSheetView"] = prot.asc_getActiveNamedSheetView;
prot["getPrintOptionsJson"] = prot.getPrintOptionsJson;
prot["asc_EditSelectAll"] = prot.asc_EditSelectAll;
prot["asc_setDate1904"] = prot.asc_setDate1904;
prot["asc_getDate1904"] = prot.asc_getDate1904;
prot["onWorksheetChange"] = prot.onWorksheetChange;
prot["asc_addCellWatches"] = prot.asc_addCellWatches;
prot["asc_deleteCellWatches"] = prot.asc_deleteCellWatches;
prot["asc_getCellWatches"] = prot.asc_getCellWatches;
prot["asc_getExternalReferences"] = prot.asc_getExternalReferences;
prot["asc_updateExternalReferences"] = prot.asc_updateExternalReferences;
prot["asc_removeExternalReferences"] = prot.asc_removeExternalReferences;
prot["asc_openExternalReference"] = prot.asc_openExternalReference;
prot["asc_changeExternalReference"] = prot.asc_changeExternalReference;
prot["asc_setUpdateLinks"] = prot.asc_setUpdateLinks;
prot["asc_getUpdateLinks"] = prot.asc_getUpdateLinks;
prot["asc_fillHandleDone"] = prot.asc_fillHandleDone;
prot["asc_canFillHandle"] = prot.asc_canFillHandle;
prot["asc_ImportXmlStart"] = prot.asc_ImportXmlStart;
prot["asc_ImportXmlEnd"] = prot.asc_ImportXmlEnd;
prot["asc_addUserProtectedRange"] = prot.asc_addUserProtectedRange;
prot["asc_changeUserProtectedRange"] = prot.asc_changeUserProtectedRange;
prot["asc_deleteUserProtectedRange"] = prot.asc_deleteUserProtectedRange;
prot["asc_getUserProtectedRanges"] = prot.asc_getUserProtectedRanges;
prot["asc_checkUserProtectedRangeName"] = prot.asc_checkUserProtectedRangeName;
prot["asc_SetSheetViewType"] = prot.asc_SetSheetViewType;
prot["asc_GetSheetViewType"] = prot.asc_GetSheetViewType;
prot["asc_ChangeTextCase"] = prot.asc_ChangeTextCase;
prot["asc_TracePrecedents"] = prot.asc_TracePrecedents;
prot["asc_TraceDependents"] = prot.asc_TraceDependents;
prot["asc_RemoveTraceArrows"] = prot.asc_RemoveTraceArrows;
prot["asc_InsertPageBreak"] = prot.asc_InsertPageBreak;
prot["asc_RemovePageBreak"] = prot.asc_RemovePageBreak;
prot["asc_ResetAllPageBreaks"] = prot.asc_ResetAllPageBreaks;
prot["asc_GetPageBreaksDisableType"]= prot.asc_GetPageBreaksDisableType;
prot["asc_GetEditableFunctions"]= prot.asc_GetEditableFunctions;
prot["asc_StartGoalSeek"] = prot.asc_StartGoalSeek;
prot["asc_CloseGoalClose"] = prot.asc_CloseGoalClose;
prot["asc_PauseGoalSeek"] = prot.asc_PauseGoalSeek;
prot["asc_ContinueGoalSeek"] = prot.asc_ContinueGoalSeek;
prot["asc_StepGoalSeek"] = prot.asc_StepGoalSeek;
prot["asc_GetSeriesSettings"] = prot.asc_GetSeriesSettings;
prot["asc_FillCells"] = prot.asc_FillCells;
prot["asc_CancelFillCells"] = prot.asc_CancelFillCells;
prot["asc_GetCalcSettings"] = prot.asc_GetCalcSettings;
prot["asc_UpdateCalcSettings"] = prot.asc_UpdateCalcSettings;
prot["asc_getCustomFunctionInfo"]= prot.asc_getCustomFunctionInfo;
prot["asc_cancelMoveCopyWorksheet"]= prot.asc_cancelMoveCopyWorksheet;
prot["asc_getOpeningDocumentsList"]= prot.asc_getOpeningDocumentsList;
prot["asc_isSupportCopySheetsBetweenBooks"]= prot.asc_isSupportCopySheetsBetweenBooks;
prot["asc_SetSmoothScrolling"]= prot.asc_SetSmoothScrolling;
prot["asc_GetSmoothScrolling"]= prot.asc_GetSmoothScrolling;
prot["asc_SetShowVerticalScroll"]= prot.asc_SetShowVerticalScroll;
prot["asc_GetShowVerticalScroll"]= prot.asc_GetShowVerticalScroll;
prot["asc_SetShowHorizontalScroll"]= prot.asc_SetShowHorizontalScroll;
prot["asc_GetShowHorizontalScroll"]= prot.asc_GetShowHorizontalScroll;
})(window);