[]
方便用户导入和导出json流的唯一目的是使他们能够在需要时交换和组织对象数据。本文总结了GcExcel Java如何使用Java处理json流的导入和导出。
本主题包括以下操作。
可以使用IWorkbook 接口的 toJson 方法将工作簿导出为json字符串流。该方法甚至允许您导出带有外部引用公式的工作簿。还可以使用IWorkbook接口的 fromJson 方法将json字符串或流导入工作簿。
请参阅以下示例代码以导入和导出json流。
// Create workbook
Workbook workbook = new Workbook();
Workbook workbook1 = new Workbook();
// Import an excel file
workbook.open("test.xlsx");
// Import or Export from or to a JSON string
OutputStream outputStream = new ByteArrayOutputStream();
workbook.toJson(outputStream);
ByteArrayOutputStream buffer = (ByteArrayOutputStream) outputStream;
byte[] bytes = buffer.toByteArray();
InputStream inputStream = new ByteArrayInputStream(bytes);
workbook1.fromJson(inputStream);
// Export workbook to an excel file
workbook1.save("json_out.xlsx");
注意:如果大型工作簿中有许多具有复杂公式的工作表,为了获得更好的性能,可以将工作簿和工作表导出和导入到单独的JSON流中。有关更多信息,请参阅只导出工作簿结构。
您可以使用IWorksheet接口的toJson方法将工作表中的信息导出为json字符串。同样,也可以使用IWorksheet接口的fromJson将json字符串导入工作表。工作表也可以导出或导入到同一工作簿或其他工作簿中。
它还允许您在SpreadJS中查看大型Excel文件。Excel文件可以在GcExcel中打开,工作表的json字符串可以使用toJson方法导出。此外,工作表的json字符串可以传输到客户端,以便在SpreadJS中加载。
局限性
将工作表json导入服务器上的其他工作簿可能会导致数据丢失或冲突
SpreadJS ssjson中使用的单元格样式在使用后会在Excel中丢失工作表.toJSON()
SpreadJS不支持Excel的所有页面设置。因此,从ssjson导入时,GcExcel不会获取所有设置。
请参阅以下示例代码以导出和导入工作表的json字符串。
Workbook workbook = new Workbook();
// ToJson&FromJson can be used in combination with spreadjs
// product:http://spread.grapecity.com/spreadjs/sheets/
// GrapeCity Documents for Excel import an excel file
String source = "ExcelJsonInput.xlsx";
workbook.open(source);
// Open the file
IWorkbook new_workbook = new Workbook();
new_workbook.open(source);
for (IWorksheet worksheet : workbook.getWorksheets()) {
worksheet.getRange("A1:C4").setValue(new Object[][] { { "Device", "Quantity", "Unit Price" },
{ "T540p", 12, 9850 }, { "T570", 5, 7460 }, { "Y460", 6, 5400 }, { "Y460F", 8, 6240 } });
// GrapeCity Documents for Excel export a worksheet to json string
String json = worksheet.toJson();
// You can use the json string to initialize spreadjs product
// Product spreadjs will show the excel file contents
// You can use spreadjs product export a json string of worksheet
// GrapeCity Documents for Excel use the json string to update content of the
// corresponding worksheet
new_workbook.getWorksheets().get(worksheet.getName()).fromJson(json);
}
// GrapeCity Documents for Excel export workbook to an excel file
String export = "ExcelJsonOutput.xlsx";
new_workbook.save(export);
GcExcel提供了在使用IWorkbook接口的fromJson方法导入JSON文件时获取JSON错误(如果有)的选项。错误消息由JsonError类的getErrorMessage属性显示。支持两种类型的错误消息:
公式JSON错误-使用FormulaJsonError类实现,在JSON文件中出现公式错误时可以引发
数据验证JSON错误-使用DataValidationJsonError类实现,在JSON文件中出现数据验证错误时可以引发
请参阅下面的示例代码,该代码将在GcExcel中导入包含公式错误的JSON文件时显示公式JSON错误。
// create a new workbook
Workbook workbook = new Workbook();
// Open JSON file contaning JSON errors
InputStream stream = new FileInputStream("ErrorJson.json");
List 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错误。