[]
        
立即试用
(Showing Draft Content)

导入和导出SpreadJS文件

GcExcel Java 支持 SpreadJS 文件的 SSJSON 和 SJS 输入/输出功能。您可以导入、修改和导出使用 SpreadJS 设计器创建的文件。

SJS 与 SSJSON 文件格式

SpreadJS v16 引入了一种新的文件格式 .sjs,该格式可更快地处理大型复杂文件,且保存时生成的文件体积更小。新的 .sjs 格式是一种压缩文件,包含多个较小的 JSON 文件,其结构与 Excel XML 结构类似。GcExcel Java 允许您像处理 XLSX、CSV 等其他文件格式一样,导入和导出新的 .sjs 文件格式。

下文将详细介绍 SJS 选项和 SSJSON 选项,帮助您使用这些格式并自定义其行为以满足需求。

SJS 选项

您可以使用 Workbook 类的 open 方法导入 .sjs 文件。在 GcExcel 中加载后,可以通过 Workbook 类的 save 方法将其导出为 Excel(XLSX)格式或重新导出为 .sjs 格式。加载或保存 .sjs 文件时,您可以使用 OpenFileFormatSaveFileFormat 枚举中的新选项“Sjs”。

以下示例代码展示了通过文件名导入和导出 .sjs 文件的方法:

// 初始化工作簿
Workbook workbook = new Workbook();

// 打开 .sjs 文件
workbook.open("ProjectPlan.sjs", OpenFileFormat.Sjs);

// 保存 .sjs 文件
workbook.save("SaveProjectPlan.sjs", SaveFileFormat.Sjs);

以下示例代码展示了通过文件流导入和导出 .sjs 文件的方法:

// 创建新工作簿
var streamworkbook = new Workbook();
// 创建新文件流以打开文件
InputStream openFile;
try {
    openFile = new FileInputStream("ProjectPlan.sjs");
    // 打开 .sjs 文件
    streamworkbook.open(openFile, OpenFileFormat.Sjs);
} catch (FileNotFoundException e1) {
    // TODO 自动生成的 catch 块
    e1.printStackTrace();
}
  
// 创建新文件流以保存文件
OutputStream out;
try {
    out = new FileOutputStream("SaveProjectPlan.sjs");
    // 将工作簿保存为 .sjs 文件
    streamworkbook.save(out, SaveFileFormat.Sjs);
} catch (FileNotFoundException e) {
    // TODO 自动生成的 catch 块
    e.printStackTrace();
}

此外,GcExcel 提供 SjsOpenOptionsSjsSaveOptions 类,用于自定义 .sjs 文件的导入和导出过程。这些选项在处理大型文件(如包含大量公式、样式或未使用名称的文件)时尤为实用。具体选项如下表所示:

类别

选项

描述

导入选项

SjsOpenOptions

setIncludeStyles

指示加载.sjs文件时是否可包含样式。默认值为true。

setIncludeFormulas

指示加载.sjs文件时是否可包含公式。默认值为true。

导出选项

SjsSaveOptions

setIncludeStyles

指示保存文件时是否可包含样式。默认值为true。

setIncludeFormulas

指示保存文件时是否可包含公式。默认值为true。

setIncludeUnusedNames

指示保存文件时是否可包含未使用的自定义名称。默认值为true。

setIncludeEmptyRegionCells

指示保存文件时是否可包含已用数据范围外的空单元格。默认值为true。

setIgnoreRangeOutOfRowCoulumnCount

指示保存文件时是否忽略超出行数和列数范围的数据。默认值为false。

setIncludeAutoMergedCells

指示是否包含自动合并的单元格。默认值为false。

setIncludeBindingSource

指示保存文件时是否包含绑定源。默认值为true。

以下示例代码展示了使用 SjsOpenOptionsSjsSaveOptions 导入和导出 .sjs 文件的方法:

// 初始化工作簿
Workbook workbook = new Workbook();

// 使用公式打开 .sjs 文件
SjsOpenOptions openOptions = new SjsOpenOptions();
openOptions.setIncludeFormulas(false);
openOptions.setIncludeStyles(false);
workbook.open("ProjectPlan.sjs", openOptions);

// 保存包含样式的 .sjs 文件
SjsSaveOptions saveOptions = new SjsSaveOptions();
saveOptions.setIncludeStyles(false);
saveOptions.setIncludeFormulas(true);
saveOptions.setIncludeUnusedNames(false);
saveOptions.setIncludeEmptyRegionCells(false);
workbook.save("SaveProjectPlan.sjs", saveOptions);

GcExcel 提供 toSjsJson 方法,可将 .sjs 文件中的所有 JSON 文件整合为单个字符串或流。此外,GcExcel 还提供 fromSjsJson 方法,用于加载由 .sjs 文件生成的所有 JSON 文件的字符串或流。这些方法同样支持 SjsOpenOptions 和 SjsSaveOptions。

方法

描述

toSjsJson()

从工作簿生成 JSON 字符串,将 .sjs 文件中的所有 JSON 文件整合为单个字符串。

toSjsJson(SjsSaveOptions options)

使用保存选项从工作簿生成 JSON 字符串,将 .sjs 文件中的所有 JSON 文件整合为单个字符串。

toSjsJson(Stream stream)

将 .sjs 文件中的所有 JSON 文件整合为单个字符串,然后将该字符串写入流中。

toSjsJson(Stream stream, SjsSaveOptions options)

使用保存选项将 .sjs 文件中的所有 JSON 文件整合为单个字符串,然后将该字符串写入流中。

fromSjsJson(string json)

从包含 .sjs 文件格式内容的 JSON 字符串生成工作簿。

fromSjsJson(string json, SjsOpenOptions options)

使用打开选项,从包含 .sjs 文件格式内容的 JSON 字符串生成工作簿。

fromSjsJson(Stream stream)

从包含 .sjs 文件格式内容的 JSON 流生成工作簿。

fromSjsJson(Stream stream, SjsOpenOptions options)

使用打开选项,从包含 .sjs 文件格式内容的 JSON 流生成工作簿。

以下示例代码展示了导出和导入由 .sjs 文件生成的单个 JSON 字符串的方法:

// 初始化工作簿
Workbook workbook = new Workbook();

// 打开工作簿
workbook.open("12-month cash flow statement1.sjs");

// 为 .sjs 文件生成 JSON 字符串并保存到流中
OutputStream outputStream;
try {
    outputStream = new FileOutputStream("CashFlow.json");
    workbook.toSjsJson(outputStream);
    outputStream.close();
} catch (FileNotFoundException e) {
    e.printStackTrace();        
}

// 从流中导入 JSON 字符串并保存为 Excel 文件
InputStream inputStream;
try {
    inputStream = new FileInputStream("CashFlow.json");
    workbook.fromSjsJson(inputStream);
} catch (FileNotFoundException e) {
    e.printStackTrace();        
}

// 保存工作簿
workbook.save("CashFlow.xlsx");

SSJSON 选项

在 SpreadJS 中,与 JSON 对象导入或导出自定义数据时,您可以设置多个序列化或反序列化选项。GcExcel API 支持其中部分选项,用于工作簿和工作表的 JSON 输入/输出。下表说明了 SpreadJS 和 GcExcel 中支持的选项:


SpreadJS(toJSON 和 fromJSON)

GcExcel(toJSON 和 fromJSON)

序列化

ignoreStyle

ignoreFormula

rowHeadersAsFrozenColumns

columnHeadersAsFrozenRows

setIgnoreStyle

setIgnoreFormula

setIgnoreSheets

setIgnoreColumnRowInfoOutOfUsedRange

setIgnoreRangeOutOfRowColumnCount

setExportSharedFormula

setIncludeAutoMergedCells

setIncludeBindingSource

反序列化

ignoreStyle

ignoreFormula

frozenColumnsAsRowHeaders

frozenRowsAsColumnHeaders

doNotRecalculateAfterLoad

setIgnoreStyle

setIgnoreFormula

setDoNotRecalculateAfterLoad

GcExcel 在 API 中提供 SerializationOptionsDeserializationOptions 类,包含上述支持的方法。

以下示例代码展示了在 GcExcel 中使用选项将工作簿序列化为 JSON 的方法:

// 从 JSON 反序列化工作簿时忽略样式和公式
DeserializationOptions deserializationOptions = new DeserializationOptions();
deserializationOptions.setIgnoreStyle(true);
deserializationOptions.setIgnoreFormula(true);
workbook.fromJson(json, deserializationOptions);

// 保存为 Excel 文件
workbook.save("FromJsonWithOptions.xlsx");

以下示例代码展示了在 GcExcel 中使用选项从 JSON 反序列化工作簿的方法:

// 将工作簿序列化为 JSON 时忽略样式和公式
SerializationOptions serializationOptions = new SerializationOptions();
serializationOptions.setIgnoreStyle(true);
serializationOptions.setIgnoreFormula(true);

String jsonWithOption = workbook.toJson(serializationOptions);

workbook.fromJson(jsonWithOption);

// 保存为 Excel 文件
workbook.save("ToJsonWithOptions.xlsx");

您可以通过选择是否保留已用范围外的行和列的样式及大小,来控制导出的 JSON 文件体积。SerializationOptions 类提供 setIgnoreColumnRowInfoOutOfUsedRange 方法,其作用如下:

  • 设置为 true(默认值)时,不导出已用范围外的行和列的样式及大小,因此文件体积更小。

  • 设置为 false 时,导出已用范围外的行和列的样式及大小,因此文件体积更大。

以下示例代码展示了上述方法对 JSON 文件体积的影响:

Workbook book = new Workbook();
 
IWorksheet worksheet = book.getWorksheets().get(0);
// 添加自定义名称样式
IStyle style = book.getStyles().add("testStyle1");
     
style.getFont().setThemeColor(ThemeColor.Accent1);
style.getFont().setTintAndShade(0.8);
style.getFont().setItalic(true);
style.getFont().setBold(true);
style.getFont().setName("LiSu");
style.getFont().setSize(28);
style.getFont().setStrikethrough(true);
style.getFont().setSubscript(true);
style.getFont().setSuperscript(false);
style.getFont().setUnderline(UnderlineType.Double);
     
Object data = new Object[][]{
    {"test", "test", "test", "test" },
    {"test", "test", "test", "test" },
    {"test", "test", "test", "test" },
    {"test", "test", "test", "test" },
    {"test", "test", "test", "test" },
};
     
worksheet.getRange("B2:E6").setValue(data);
worksheet.getRange("A:XFD").setStyle(style);
worksheet.getRange("A:XFD").setColumnWidthInPixel(20);
        
// 仅将已用范围的大小/样式导出到 JSON
SerializationOptions options = new SerializationOptions();
options.setIgnoreColumnRowInfoOutOfUsedRange(true);
        
try {
    book.toJson(new FileOutputStream("TestJson_true.json"), options);    // 输出文件大小为 9KB
} catch (FileNotFoundException e1) {
    e1.printStackTrace();
}
        
// 导出所有大小/样式到 JSON
SerializationOptions options2 = new SerializationOptions();
options2.setIgnoreColumnRowInfoOutOfUsedRange(false);
        
try {
    book.toJson(new FileOutputStream("TestJson_false.json"), options2);    // 输出文件大小为 809KB
} catch (FileNotFoundException e1) {
    e1.printStackTrace();
}
        
// 默认行为(与设置为 true 时相同)
try {
    book.toJson(new FileOutputStream("TestJson_default.json"));    // 输出文件大小为 9KB
} catch (FileNotFoundException e) {
    e.printStackTrace();
}

导出到 JSON 文件时,您还可以使用 SerializationOptions 类中的 setExportSharedFormula 方法,控制是否将公式导出为共享公式。设置为 true(默认值)时,可将公式导出为共享公式;设置为 false 时,公式将导出为独立公式。

在 GcExcel v6.0.1 及更高版本中,公式会导出为共享公式并保存到 JSON 文件(或 SSJSON 文件)中。由于共享公式与 GcExcel v5 及更低版本、SpreadJS v15 及更低版本不兼容,您可以使用此选项实现向后兼容,在导出的 JSON 文件中跳过共享公式。

以下示例代码展示了将公式导出为共享公式的方法:

// 创建新工作簿
 var workbook = new Workbook();

 // 设置迭代计算选项
 workbook.getOptions().getFormulas().setEnableIterativeCalculation(true);
 workbook.getOptions().getFormulas().setMaximumIterations(20);
 var worksheet = workbook.getWorksheets().get(0);

 // 设置值和公式
 worksheet.getRange("B2").setValue("Initial Cash");
 worksheet.getRange("C2").setValue(10000);
 worksheet.getRange("B3").setValue("Interest");
 worksheet.getRange("C3").setValue(0.0125);

 worksheet.getRange("B5").setValue("Month");
 worksheet.getRange("C5").setValue("Total Cash");  

 worksheet.getRange("B6:B17").setValue(new double[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 });  

 worksheet.getRange("C6").setFormula("=C2*(1+$C$3)");  
 worksheet.getRange("C7:C17").setFormula("=C6*(1+$C$3)");  

 // 初始化 SerializationOptions 并将 ExportSharedFormula 设置为 true
 SerializationOptions options = new SerializationOptions();
 options.setExportSharedFormula(true);

 // 保存 JSON 文件
 PrintWriter out1;
try {
    out1 = new PrintWriter("ExportSharedFormulas.json");
    out1.println(workbook.toJson(options));
} catch (FileNotFoundException e1) {
    // TODO 自动生成的 catch 块
    e1.printStackTrace();
}     

 // 初始化 SerializationOptions 并将 ExportSharedFormula 设置为 false
 SerializationOptions options2 = new SerializationOptions();
 options2.setExportSharedFormula(false);

 // 保存 JSON 文件
 PrintWriter out2;
try {
    out2 = new PrintWriter("ExportIndividualFormulas.json");
    out2.println(workbook.toJson(options));
} catch (FileNotFoundException e) {
    // TODO 自动生成的 catch 块
    e.printStackTrace();
}

注意:SpreadJS 支持多级行或列标题,但 GcExcel 不支持。不过,您可以通过以下步骤在 GcExcel 中保留标题信息:

  1. 使用 SpreadJS 导出 JSON 时,将“rowHeadersAsFrozenColumns”或“columnHeadersAsFrozenRows”选项设置为 true,将多级标题转换为冻结区域,然后使用 GcExcel 加载该 JSON 文件。

  2. 在 GcExcel 中操作冻结区域。

  3. 使用 GcExcel 导出 JSON 文件,然后使用 SpreadJS 加载该 JSON 文件时,将“frozenColumnsAsRowHeaders”或“frozenRowsAsColumnHeaders”选项设置为 true,将冻结区域转换为标题。

GcExcel 允许您将工作簿的框架转换为 JSON 流,即可以导出仅包含工作表(无任何数据)的工作簿。实现方法为:将 SerializationOptions.setIgnoreSheets 方法设置为 true,然后在调用 IWorkbook.toJson 方法时将其作为参数传入。

您还可以使用 IWorksheet.toJson(Stream stream) 方法,将单个工作表导出到单独的 JSON 流中。同样,IWorkSheet.fromJson(Stream stream) 方法允许您在需要时从 JSON 流中导入工作表。

此功能在加载包含多个工作表(且工作表中包含复杂公式)的大型工作簿时,对优化性能尤为实用。通过上述方法,您可以先加载仅包含工作表名称的空工作簿,然后在用户选择工作表标签时再加载工作表数据。

以下示例展示了如何将工作簿和工作表导出到单独的 JSON 流中,并在需要时将其加载到新的工作簿实例中:

// 创建新工作簿
Workbook workbook = new Workbook();

// 旧工作簿
IWorkbook oldWorkbook = new com.grapecity.documents.excel.Workbook();

InputStream fileStream = getResourceStream("xlsx\\12-month cash flow statement1.xlsx");
oldWorkbook.open(fileStream);

FileOutputStream workbookOutputJson = null;
FileInputStream workbookInputJson = null;
FileOutputStream worksheetOutputJson = null;
FileInputStream worksheetInputJson = null;

try {
    SerializationOptions serializationOptions = new SerializationOptions();
    serializationOptions.setIgnoreSheets(true);
    
    // 将不含工作表的工作簿框架导出到 JSON 流
    workbookOutputJson = new FileOutputStream("workbookJava.json");
    oldWorkbook.toJson(workbookOutputJson, serializationOptions);
    
    // 导入工作簿流
    workbookInputJson = new FileInputStream("workbookJava.json");
    workbook.fromJson(workbookInputJson);

    // 将工作表导出到 JSON 流
    worksheetOutputJson = new FileOutputStream("worksheetJava.json");
    oldWorkbook.getActiveSheet().toJson(worksheetOutputJson);

    // 导入工作表流
    worksheetInputJson = new FileInputStream("worksheetJava.json");
    workbook.getActiveSheet().fromJson(worksheetInputJson);
} catch (FileNotFoundException e) {
    // TODO 自动生成的 catch 块
    e.printStackTrace();
} finally {
    // 关闭流
    try {
        if (workbookOutputJson != null) {
            workbookOutputJson.close();
        }
        
        if (workbookInputJson != null) {
            workbookInputJson.close();
        }
        
        if (worksheetOutputJson != null) {
            worksheetOutputJson.close();
        }
        
        if (worksheetInputJson != null) {
            worksheetInputJson.close();
        }
    } catch (Exception e2) {
        // TODO: 处理异常
    }
}
    
// 保存为 Excel 文件
workbook.save("WorkbookToJsonWithoutSheets.xlsx");

控制绑定数据导出

GcExcel 允许您控制导出时是否包含绑定数据源,具体通过 SjsSaveOptionssetIncludeBindingSource 方法实现:导出为 .sjs 文件时,使用 SjsSaveOptions 中的该属性;导出为 .ssjson 文件时,使用 SerializationOptions 中的该属性。

以下示例代码展示了导出为 .sjs 文件时排除绑定源的方法:

// 创建新工作簿
var workbook = new Workbook();

// 定义 JSON 数据源
String dataSource = "{ \"ds\":" +
        "[\n" +
        "   {\"Area\": \"North America\",\"City\": \"Chicago\",\"Category\": \"Consumer Electronics\",\"Name\": \"Bose 785593-0050\",\"Revenue\": 92800},\n" +
        "   {\"Area\": \"North America\",\"City\": \"New York\",\"Category\": \"Consumer Electronics\",\"Name\": \"Bose 785593-0050\",\"Revenue\": 92800},\n" +
        "   {\"Area\": \"South America\",\"City\": \"Santiago\",\"Category\": \"Consumer Electronics\",\"Name\": \"Bose 785593-0050\",\"Revenue\": 19550},\n" +
        "   {\"Area\": \"Europe\",\"City\": \"Berlin\",\"Category\": \"Consumer Electronics\",\"Name\": \"Sony WH-1000XM4\",\"Revenue\": 30000},\n" +
        "   {\"Area\": \"Asia\",\"City\": \"Tokyo\",\"Category\": \"Consumer Electronics\",\"Name\": \"Sony WH-1000XM4\",\"Revenue\": 45000},\n" +
        "   {\"Area\": \"North America\",\"City\": \"Los Angeles\",\"Category\": \"Consumer Electronics\",\"Name\": \"Apple AirPods\",\"Revenue\": 60000},\n" +
        "   {\"Area\": \"Europe\",\"City\": \"Paris\",\"Category\": \"Consumer Electronics\",\"Name\": \"Apple AirPods\",\"Revenue\": 55000},\n" +
        "   {\"Area\": \"Asia\",\"City\": \"Seoul\",\"Category\": \"Consumer Electronics\",\"Name\": \"Samsung Galaxy Buds\",\"Revenue\": 40000},\n" +
        "   {\"Area\": \"South America\",\"City\": \"Buenos Aires\",\"Category\": \"Consumer Electronics\",\"Name\": \"Samsung Galaxy Buds\",\"Revenue\": 35000},\n" +
        "   {\"Area\": \"North America\",\"City\": \"Toronto\",\"Category\": \"Consumer Electronics\",\"Name\": \"Bose 785593-0050\",\"Revenue\": 50000}\n" +
        " ]" +
        "}";

// 向工作表添加数据源
IWorksheet dataSourceSheet = workbook.getWorksheets().add();
dataSourceSheet.setName("DataSource");
ITable table = dataSourceSheet.getTables().add(dataSourceSheet.getRange("A1:E4"), true);

// 设置绑定路径
table.setBindingPath("ds");
table.getColumns().get(0).setDataField("Area");
table.getColumns().get(1).setDataField("City");
table.getColumns().get(2).setDataField("Category");
table.getColumns().get(3).setDataField("Name");
table.getColumns().get(4).setDataField("Revenue");

// 设置数据源
dataSourceSheet.setDataSource(new JsonDataSource(dataSource));

// 创建数据透视表工作表
IWorksheet pivotSheet = workbook.getWorksheets().get(0);
pivotSheet.setName("PivotSheet");

// 创建数据透视表
IPivotCache pivotcache = workbook.getPivotCaches().create(table);
IPivotTable pivottable = pivotSheet.getPivotTables().add(pivotcache, pivotSheet.getRange("A1"), "pivottable1");

// 配置数据透视表字段
IPivotField fieldArea = pivottable.getPivotFields().get("Area");
fieldArea.setOrientation(PivotFieldOrientation.RowField);
IPivotField fieldCity = pivottable.getPivotFields().get("City");
fieldCity.setOrientation(PivotFieldOrientation.RowField);
IPivotField fieldName = pivottable.getPivotFields().get("Name");
fieldName.setOrientation(PivotFieldOrientation.ColumnField);
IPivotField fieldRevenue = pivottable.getPivotFields().get("Revenue");
fieldRevenue.setOrientation(PivotFieldOrientation.DataField);
pivotSheet.getUsedRange().autoFit();
pivottable.setColumnGrand(false);
pivottable.setRowGrand(false);
pivottable.refresh();

SjsSaveOptions saveOptions = new SjsSaveOptions();

// 如果导出为 SSJSON 格式,请取消以下注释
//SerializationOptions saveOptions = new SerializationOptions();

// 将 IncludeBindingSource 属性设置为 false,以排除绑定源的导出
saveOptions.setIncludeBindingSource(false);

// 保存工作簿
workbook.save("IncludeBindingSourceOption.sjs", saveOptions);

// 如果要导出 SSJSON,请取消以下代码注释
/*
try 
{
    // 保存工作簿
    workbook.toJson(new FileOutputStream("IncludeBindingSourceOption.ssjson"), saveOptions);
} 
catch (FileNotFoundException e1) {
    e1.printStackTrace();
}
*/

注意:在数据绑定更改大小后,setIncludeBindingSource 方法不会将表格恢复到原始大小。此方法仅控制是否导出数据。

行和列计数

GcExcel 允许您在执行 .sjs 或 JSON 输入/输出时设置工作表的行和列计数。IWorksheet 接口的 setRowCountsetColumnCount 方法可实现此功能。插入或删除行或列时,setRowCountsetColumnCount 方法还会增减行和列的计数。

您还可以使用 SjsSaveOptions 类的 setIgnoreRangeOutOfRowColumnCount 方法和 SerializationOptions 类的 setIgnoreRangeOutOfRowColumnCount 方法,选择是否忽略超出指定行和列计数范围的数据。该方法的默认值为 false,即会将超出指定行和列计数范围的数据导出到 .sjs 或 JSON 中。

以下示例代码展示了设置工作表的行和列计数,并将其导出为 .sjs 文件或 .ssjson 文件的方法:

// 创建新工作簿
Workbook workbook = new Workbook();

// --------------- 导出为 .sjs 文件 ---------------

// 打开 .sjs 文件
workbook.open("LoanDetails.sjs", OpenFileFormat.Sjs);

// 访问第一个工作表
IWorksheet worksheet = workbook.getWorksheets().get(0);

// 将行和列计数设置为 4
worksheet.setRowCount(4);
worksheet.setColumnCount(4);

// 配置导出以忽略行/列计数范围外的数据
SjsSaveOptions sjsSaveOptions = new SjsSaveOptions();
sjsSaveOptions.setIgnoreRangeOutOfRowColumnCount(true);

// 保存为 .sjs 文件
workbook.save("IgnoreDataOption.sjs", sjsSaveOptions);

// --------------- 导出为 SSJSON 文件 ---------------
// 如果要导出为 SSJSON,请取消以下代码注释

/*
IWorksheet worksheet2 = workbook.getWorksheets().get(0);

// 设置单元格数据示例
worksheet2.getRange("A1").setValue(1);
worksheet2.getRange("A11").setValue(2);

// 将行和列计数设置为 10
worksheet2.setRowCount(10);
worksheet2.setColumnCount(10);

// 配置导出以忽略行/列计数范围外的数据
SerializationOptions ssjsonOptions = new SerializationOptions();
ssjsonOptions.setIgnoreRangeOutOfRowColumnCount(true);

// 保存为 SSJSON 文件(JSON 格式)
// 使用 SpreadJS 打开此 JSON 文件,可看到行/列计数为 10
try {
    workbook.toJson(new FileOutputStream("RowColumnCount.json"), ssjsonOptions);
} catch (FileNotFoundException e) {
    e.printStackTrace();
}
*/

限制

  • 行和列计数设置仅支持 .sjs 和 JSON 输入/输出,无法导出到 Excel 或 PDF 文件。

  • setRowCountsetColumnCount 设定的值不能超过 Microsoft Excel 中 1,048,576 行和 16,384 列的最大限制。

导入 JSON 文件时获取错误信息

GcExcel 提供了在使用 IWorkbook 接口的 fromJson 方法导入 JSON 文件时获取 JSON 错误(如有)的选项。错误信息通过 JsonError 类的 getErrorMessage 属性显示。支持两种类型的错误信息:

  • 公式 JSON 错误 - 由 FormulaJsonError 类实现,当 JSON 文件中存在公式错误时可能触发。

  • 数据验证 JSON 错误 - 由 DataValidationJsonError 类实现,当 JSON 文件中存在数据验证错误时可能触发。

以下示例代码展示了导入包含公式错误的 JSON 文件时,GcExcel 如何显示公式 JSON 错误:

// 创建新工作簿
Workbook workbook = new Workbook();
// 打开包含 JSON 错误的 JSON 文件
InputStream stream = new FileInputStream("ErrorJson.json");

List<JsonError> errors = workbook.fromJson(stream);
for (JsonError item : errors) {
    if (item instanceof FormulaJsonError) {
        FormulaJsonError fError = (FormulaJsonError) item;
        System.out
                .println(fError.getErrorMessage() + " "
                        + workbook.getWorksheets().get(fError.getWorksheetName())
                                .getRange(fError.getRow(), fError.getColumn()).toString()
                        + " " + fError.getFormula());
    }

    if (item instanceof DataValidationJsonError) {
        DataValidationJsonError dError = (DataValidationJsonError) item;
        System.out.println(dError.getErrorMessage() + " "
                + workbook.getWorksheets().get(dError.getWorksheetName()).getRange(dError.getRange().toString())
                + " " + dError.getErrorContent());
    }

限制

如果 JSON 文件中的数据验证其公式存在错误,将生成数据验证 JSON 错误。