大致是
模板的初始化
- java:gcexcel 专门管修改ssjson的事情,比如说excel转为 ssjson。存成模板A
从模板复制新的ssjson,重复修改新的ssjson
- 业务流程中,需要的时候复制一份ssjson,从模板A复制出来一份B,不修改内容
- 使用 spreadjs 展示B,能修改样式的地方我们全部隐藏了,产生的修改事件发给后端,gcexcel 把修改应用到 ssjson 里面
问题出在后面修改的过程里面。可以认为gcexcel转换成ssjson应该是好着的。就是看看 spreadjs
修改的内容类似于(大部分时候只是设置value,只有 type sheetName row col value。只有修改样式时有style tag那些,但是ui上我们隐藏所有能改样式的地方了,这个只是构造出来的一个例子)
- {
- "events": [
- {
- "col": 4,
- "row": 0,
- "sheetName": "数据汇总",
- "style": {
- "backColor": "Accent 5",
- "borderBottom": {
- "color": "rgb(216,216,216)",
- "style": 1
- },
- "borderLeft": {
- "color": "rgb(216,216,216)",
- "style": 1
- },
- "borderRight": {
- "color": "rgb(216,216,216)",
- "style": 1
- },
- "borderTop": {
- "color": "rgb(216,216,216)",
- "style": 1
- },
- "decoration": {},
- "font": "700 16px Calibri",
- "foreColor": "Background 1",
- "formatter": "General",
- "hAlign": 0,
- "locked": true,
- "name": "__b-1-30000000-0",
- "shrinkToFit": false,
- "textDecoration": 0,
- "textIndent": 0,
- "themeFont": "Body",
- "vAlign": 1,
- "wordWrap": true
- },
- "tag": null,
- "type": "cell_change",
- "value": "姓名2"
- }
- ]
- }
复制代码
而且即使修改样式,也是在单元格的级别修改样式,类似于
- IWorksheet iWorksheet = workbook.getWorksheets().get(sheetName);
- if (iWorksheet == null) {
- return;
- }
- // ...
- IRange range = iWorksheet.getRange(changeItem.getInt("row"), changeItem.getInt("col"));
- // ...
- range.setValue(changeItem.get("value"));
- // ...
- JSONObject styleData = changeItem.optJSONObject("style", new JSONObject());
- range.getStyle().fromJson(styleData.toString());
复制代码 我理解里面这样应该不会改到 themeColor?
代码比较多,不大好抽离出来一个最小的例子,逻辑就是上面这些了。代码里面没有其他地方有对style或者theme或者themeColor的修改
-----------------------------------------------
关于 Light13,这行的样式没有用这个。这次的问题和Light13这个 sheets.<TABLE>.tables[0].style ,也就是 { buildInName: Light13 }的这个样式没有关系。
这几个格子是通过 sheets.<TABLE>.namedStyles 使用了sheets.<TABLE>.theme.themeColor.accent5 这个颜色,这个颜色的值发生了改变。
<TABLE> 的值就是数据汇总,你们通过 jq 可以直接定位到值,或者编辑器搜索一下accent5就能搜到对应的位置。
|