ASPOSE.CELL操作XLSX 到 XLSB时,Pivot table的格式丢失

我们在项目中有一个需求,由于EXCEL数据量,Sheet比较多,为了提升打开文件效率,需要将XLSX格式转换为XLSB格式,使用的Python代码是:
Workbook = jpype.JClass(“com.aspose.cells.Workbook”)
SaveFormat = jpype.JClass(“com.aspose.cells.SaveFormat”)
wb = Workbook(input_xlsx)
wb.save(output_xlsb, SaveFormat.XLSB)
由于EXCEL内容中格式比较复杂,碰到Pivot table的时候,发现列的格式丢失了,比如源文件中列名称居中,导出后格式丢失,无法居中,还有就是数据内容在行显示 的时候,线框也丢失了
我们也用了代码去设置了格式,但是没有效果
sheet = wb.getWorksheets().get(“testsheet”)
cells = sheet.getCells()
cell = cells.get(row_idx, col_idx)
style = cell.getStyle()
style.setVerticalAlignment(TextAlignmentType.CENTER)
style.setHorizontalAlignment(TextAlignmentType.CENTER)
style.setTextWrapped(True)
cell.setStyle(style)
同时,避免Pivot table打开时刷新,还加了如下代码:
pivots = sheet.getPivotTables()
pt = pivots.get(i)
pt.setPreserveFormatting(True)
pt.setAutoFormat(False)
pt.setRefreshDataOnOpeningFile(False)

@Dong_Xing
1,请上传你的模板文件和代码,我们会尽快检查。
2,pt.setRefreshDataOnOpeningFile(False) ,最好调用Workbook.RefreshAll() 刷新透视表样式和数据, 我们不能确定文件中缓存的数据和样式是正确的,

归档.zip (806.2 KB)

代码和模版已经打包上传,通过代码跑出来的效果会多出来空白列,如下图:
image.png (96.6 KB)

请帮忙看看,多谢

@simon.zhao

@Dong_Xing

您好,

感谢您提供详细的示例代码、模板文件以及对比截图。

我们已经收到了您上传的压缩包,并成功将这些资料同步到了相关的内部问题单中。关于在 XLSX 转换为 XLSB 过程中出现的透视表(Pivot Table)格式丢失以及多出空白列的问题,我们的开发团队将结合您提供的样本进行深入分析和调试。

一旦有任何进展或修复方案,我们会第一时间在此贴中通知您。感谢您的配合与耐心等待。

@Dong_Xing
CELLSNET-60417.zip (631.8 KB)

Please check the above file which is generated by inner hot fix with following codes:

# 打开文件
wb = Workbook(download_path)

# 设置第一个数据透视表打开文件时不自动刷新
# Worksheets[0].PivotTables[0]
ws = wb.getWorksheets().get(0)
pt = ws.getPivotTables().get(0)
pt.setRefreshDataOnOpeningFile(False)

# RefreshAll
wb.refreshAll()

# 计算公式
wb.calculateFormula()

# 保存为 XLSB
wb.save(dest_path)

@Dong_Xing
We have opened the following new ticket(s) in our internal issue tracking system and will deliver their fixes according to the terms mentioned in Free Support Policies.

Issue ID(s): CELLSPYTHONJAVA-141

You can obtain Paid Support Services if you need support on a priority basis, along with the direct access to our Paid Support management team.

非常感谢您的回复,空白列的问题,确实没有了,但是有些单元格的format丢失了,如图所示:
1、有的之前是比较浅的线,生成后变深
2、有的是生成后线没有了

请再帮忙看看,感谢

@simon.zhao
image.png (178.7 KB)

我们测试了一下,基本上是由于Refreshall之后,单元格的格式就会丢失很多,所以我们的代码改成了手动设置格式,并且没有调用Refreshall
@simon.zhao

@Dong_Xing
我们会尽快查看这个边框的问题。
如果Refreshall 产生了问题,请上传你的测试文件,我们会尽快检查。
我们已经解决了以下问题:
1,这个文件空白列的问题是列col3 设置了无意义的隐藏明细, 导致我们布局出了问题。
2,居中的问题是xlsb中保存透视表样式的问题,
3, calculated field的公式解析问题。

@Dong_Xing
在模板文件中:

	<c r="E20" s="2134"/>
			<c r="F20" s="2137" t="s">
				<v>46</v>
			</c>

如果不调用刷新,E20 是空的。

我的测试文件就是之前上传的模版文件
模版文件中,是有线的,但是您给我提供的zip文件中的excel是没线的,我上面截了图,大概在56行到64行,另外,有些单元格原始文件是细的线,但是生成后变粗了,大概在24行到30行左右

麻烦您在帮忙看看,感谢

@simon.zhao

@Dong_Xing

感谢您的反馈以及提供的详细说明。

我们已经注意到您提到的关于边框格式的问题,特别是特定行范围内(如 24-30 行及 56-64 行)出现的线型变粗或线条丢失的情况。这些详细的观察结果对于我们定位问题非常有帮助,我们已将这些信息补充到了正在跟踪的问题单中。

目前,该问题已被标记为已修复,并计划包含在即将发布的 26.8 版本中。我们的开发团队正在对透视表在转换为 XLSB 格式时的样式保留逻辑进行进一步的优化,以确保边框细节与原始文件保持一致。

一旦新版本发布或有更多进展,我们会立即在此贴中通知您。感谢您的耐心配合。

@Dong_Xing
CELLSPYTHONJAVA-142.zip (633.9 KB)

请检查一下上面的文件,我修复了一些边框的问题。
如果还有问题,欢迎及时指出。我们会尽快修复。

@Dong_Xing

We are pleased to inform you that your issue (Ticket ID: “CELLSPYTHONJAVA-141”) has been resolved.
This fix/enhancement will be included in the upcoming release (v26.8).

你好,现在看上去这个文件没有问题了
不过我们的sheet还有很多其他的复杂格式,Mock数据后,会有一些内容变化,不太好验证,我需要测试下生产环境的数据,所以您这边能否提供一下v26.8的测试包,我在本地测试下其他的sheet是否还会有问题
另外,能否麻烦问下,v26.8版本大概什么时间发布?
感谢
@simon.zhao

@Dong_Xing

你好,

很高兴得知目前提供的修复文件在您的测试中表现良好。

关于您提到的测试包需求,我们只能为优先级用户提供hotfix。不过,该修复已经正式合入开发分支,并确定将包含在即将发布的 26.8 版本中。

关于发布时间,Aspose.Cells 遵循每月一次的发布周期。26.8 版本预计将在 8 月份的前半月(大约 5 日至 15 日之间)发布。届时新版本发布后,我们会第一时间在此贴中通知您,您可以直接下载正式版并在生产环境下进行全面验证。

感谢您的耐心等待与配合。

@Dong_Xing

We are pleased to inform you that your issue (Ticket ID: “CELLSPYTHONJAVA-142”) has been resolved.
This fix/enhancement will be included in the upcoming release (v26.8).

The issues you have found earlier (filed as CELLSNET-60417) have been fixed in this update. This message was posted using Bugs notification tool by Agent assistant.

感谢,我会用最新版再测试下我们生产环境的文件,如果有其他问题,我在及时反馈

@Dong_Xing

不客气,很高兴听到您对目前的进展感到满意。

我们建议您在 v26.7 发布后下载并更新到最新版本进行测试。如果您在生产环境的测试过程中遇到任何其他问题或有进一步的反馈,请随时在此贴中告知我们,我们将非常乐意为您提供支持。