[]
        
(Showing Draft Content)

导入和导出JSON流

方便用户导入和导出json流的唯一目的是使他们能够在需要时交换和组织对象数据。本文总结了GcExcel Java如何使用Java处理json流的导入和导出。

本主题包括以下操作。

导入和导出工作簿的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流中。有关更多信息,请参阅只导出工作簿结构

导入和导出工作表的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);

导入JSON文件时检索错误

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错误。