Я использую SpreadJS v12 в качестве инструмента для создания отчетов. Пользователь войдет на страницу, получит нужные данные, создаст диаграммы и сохранит их для дальнейшего использования. Когда пользователь сохраняет отчет, я получаю данные Json (GC.Spread.Sheets.Workbook.toJSon) и сохраняю этот Json в базе данных, и всякий раз, когда кто-то пытается получить тот же отчет, я получаю Json из базы данных и передаю его странице (GC .Spread.Sheets.Workbook.fromJSon). Все работает нормально, кроме случаев, когда на странице есть диаграмма, источник данных для серии диаграмм (xValues и yValues) изменяется. Когда я проверяю формат Json, он выглядит так: Sheet2! $ B $ 2: $ B $ 25, но на диаграмме это: Sheet2! $ A $ 1: $ A $ 24. Я делаю что-то неправильно?
Кстати, мои параметры сериализации: {ignoreFormula: false, ignoreStyle: false, rowHeadersAsFrozenColumns: true, columnHeadersAsFrozenRows: true, doNotRecalculateAfterLoad: false}
this.state.spread = new GC.Spread.Sheets.Workbook(document.getElementById("spreadSheetContent"), { sheetCount: 1 });
Это мой способ сохранения:
var pageJson = this.state.spread.toJSON(this.serializationOption);
let self = this;
let model = {
Id: "",
Name: reportName,
Query: query,
PageJson: JSON.stringify(pageJson)
}
this.post( { model }, "Query/SaveReportTemplate")
.done(function(reply){
self.createSpreadSheet(reply);
}).fail(function(reply){
self.PopUp(reply, 4 );
});
И это мой метод загрузки:
var jsonOptions = {
ignoreFormula: false,
ignoreStyle: false,
frozenColumnsAsRowHeaders: true,
frozenRowsAsColumnHeaders: true,
doNotRecalculateAfterLoad: false
}
this.state.spread.fromJSON(JSON.parse(template.PageJson),jsonOptions);
this.state.spread.repaint();
Что ж, после долгого дня, я думаю, что нашел причину проблемы и начал работать над этим.
Допустим, у нас есть два листа. Индекс Sheet1 равен 0, а индекс Sheet2 равен 1. Из-за параметров сериализации json, таких как frozenColumnsAsRowHeaders и frozenRowsAsColumnHeaders, до тех пор, пока Sheet2 не будет окрашен, номера строк и номера столбцов в json отличаются.
Если на Sheet1 есть формула или диаграмма, ссылающаяся на Sheet2, их ссылки будут указывать на ячейку, отличную от той, которую вы установили первой. Так что всегда ссылаясь на листы, которые будут окрашены раньше, - это способ решить эту проблему.
не могли бы вы предоставить образец кода, чтобы мы могли ясно видеть, что происходит. благодаря.