[]
        
(Showing Draft Content)

导入和导出.xlsx文档

概览

本节总结 GcExcel Java 如何处理表单(.xlsx文件)。

使用 GcExcel Java 创建工作簿并保存时,会自动将其导出到外部位置或文件夹。当 GcExcel Java 导入(导入文件或打开文件)Excel 文件时,可以加载导入的电子表格的整个模板,也可以只导入数据。GcExcelJava 提供了一种 open 方法,用于打开带有各种导入选项的文件,这些选项可以通过 XlsxOpenOptions 类的 setImportFlags 方法访问。类似地,要将工作簿导出为 .xlsx 文件,可以使用 save 方法并为 GcExcel 提供的各种保存选项,以指定要跳过的内容和要导出的内容。有关 GcExcel 提供的导入和导出选项的详细信息,请参阅导入和导出选项

另一种常见情况,您可能只需要从电子表格或单元格区域导入数据。为了处理这种情况,GcExcelJava 提供了 importData 方法,以方便从外部工作表或单元格区域高效加载。有关仅导入数据的详细信息,请参见只导入数据

导入导出选项

在导入和导出 .xlsx 文件时,可能不需要以完全相同的方式传输所有内容。有时您可能只需要数据,而在其他时候,您可能只想跳过公式等。GcExcel Java 提供了各种导入和导出选项,让您可以选择保留什么和跳过什么。这些选项在处理大型文件(如包含多个工作表、多个公式或大量形状的文件)时特别有用。GcExcel Java 提供了以下方法来导入和导出 .xlsx 文件,以便您可以仅导入或导出所需的文件。


类名

方法名

描述

导入选项

XlsxOpenOptions / XlsmOpenOptions

getDoNotAutoFitAfterOpened

导入后是否自动调整行高度。

getDoNotRecalculateAfterOpened

导入后是否重新计算公式值。

getImport Flags

提供各种标志以导入工作表的各个属性。有关详细信息,请参见使用导入标志

导出选项

XlsxSaveOptions / XlsmSaveOptions

setIgnoreFormulas

导出时忽略公式,只保留公式计算的结果。

setExcludeUnusedStyles

导出时排除未使用的样式。

setExcludeUnusedNames

导出时排除未使用的名称。

setExcludeEmptyRegionCells

导出时排除空单元格,即位于使用范围之外且具有样式但不包含数据的单元格。

GcExcel Java 还支持在对 Excel 文件执行导入和导出操作时保留日语 Ruby 字符。此外,用户还可以在执行其他电子表格任务(如插入、删除、复制、剪切、合并、清除、排序等)后,以最高精度调整包含日语Ruby字符的单元格。

使用导入标志

在打开工作簿时,GcExcel Java 还提供了几个可在导入操作期间使用的开放选项。

ImportFlags 枚举允许用户使用指定的打开选项(共有十个选项可用:NoFlag、Data and Formulas、Table、mergeArea、Style、ConditionalFormatting、DataValidation、PivotTable 和 Shapes)导入工作簿,如下面共享的表中所述。

导入的标志选项

描述

NoFlag

当您不想在打开 Excel 文件时放置任何导入标志时,使用此选项。这意味着工作表中的所有数据都将按原样导入。

Data

当您只想在打开 Excel 文件时导入工作表中的数据时,使用此选项。

Formulas

如果要在打开 Excel 文件时同时导入工作表中的数据和公式,则使用此选项。

Table

当您要在打开 Excel 文件时仅导入工作表中的表时,使用此选项。

MergeArea

在打开 Excel 文件时,如果只想导入工作表中的合并单元格或跨区单元格,则使用此选项。

Style

打开 Excel 文件时,如果只想导入应用于工作表中单元格的样式,则使用此选项。

ConditionalFormatting

当您只想在打开 Excel 文件时导入应用于工作表的条件格式规则时,可以使用此选项。

DataValidation

打开 Excel 文件时,如果只希望导入应用于工作表的数据验证规则,则使用此选项。

PivotTable

如果在打开 Excel 文件时只想导入工作表中的数据透视表,则使用此选项。

Shapes

如果在打开 Excel 文件时只希望导入嵌入工作表中的形状,则使用此选项。

请参阅以下示例代码以导入和导出 .xlsx 文档。

// Create workbook and access its first worksheet
Workbook workbook = new Workbook();
IWorksheet worksheet = workbook.getWorksheets().get(0);
            
// Assigning value to range
worksheet.getRange("A3").setValue(5);
worksheet.getRange("A2").setValue(5);
worksheet.getRange("A1").setValue(5);
worksheet.getRange("B1").setValue(5);
            
// Exporting .xlsx document
workbook.save("savingfile.xlsx", SaveFileFormat.Xlsx);

// Exporting .xlsx document while setting password
XlsxSaveOptions options = new XlsxSaveOptions();
options.setPassword("Pwd");
workbook.save("savingfile.xlsx", options);
            
 // Exporting .xlsx document by ignoring cell formulas
workbook.getActiveSheet().getRange("A4").setFormula("=Sum(A1+A2+A3)");
XlsxSaveOptions options2 = new XlsxSaveOptions();
options2.setIgnoreFormulas(true);
workbook.save("ignoreformulas.xlsx", options2);

// Importing .xlsx document
workbook.open("Source.xlsx", OpenFileFormat.Xlsx);

// Importing .xlsx document with Open options

// Import only data from .xlsx document.
XlsxOpenOptions options3 = new XlsxOpenOptions();
options3.setImportFlags(EnumSet.of(ImportFlags.Data));
workbook.open("Source.xlsx", options3);

// Don't recalculate after opened.
XlsxOpenOptions options1 = new XlsxOpenOptions();
options1.setDoNotRecalculateAfterOpened(true);
workbook.open("Source.xlsx", options1);

只导入数据

为了仅从指定的工作表或单元格范围导入数据,GcExcel Java 提供了 importData 方法,该方法打开工作表并为您获取数据。 这种方法在只需要数据并且不需要处理对象模型的其余部分的场景中很有用。 importData 方法使用文件或文件流和工作表的名称作为主要参数,可以指定工作表(sheet)、表格(table)或区域(range)的名称作为数据源。为了获取文件或文件流中使用的工作表和表格的名称,Workbook 类提供了 getNames 方法,该方法返回一个名称的数组。

// Create a new workbook
Workbook workbook = new Workbook();
// Open an excel file.
InputStream fileStream = getResourceStream("AgingReport.xlsx");
// Get the possible import names in the file.
// The names[0] and names[1] are sheet names: "Aging Report", "Invoices".
// The names[2] and names[3] are table names: "'Aging Report'!tblAging", "Invoices!tblInvoices".
String[] names = Workbook.getNames(fileStream);
// The InputStream of the Java platform cannot be read repeatedly, so you need to create another one.
InputStream fileStream2 = getResourceStream("AgingReport.xlsx");
// Import the data of a table "'Aging Report'!tblAging" from the fileStream.
Object[][] data = Workbook.importData(fileStream2, names[2]);
// Assign the data to current workbook.
workbook.getWorksheets().get(0).getRange(0, 0, data.length, data[0].length).setValue(data);

// Save to an excel file
workbook.save("ImportDataForTable.xlsx");

在处理包含多个工作表或许多公式的繁重文件时,可以使用importData方法优化加载性能,因为它只读取数据。该方法还提供了重载,您可以在其中指定目标单元格的范围,并且只能读取该特定部分,即使您的文件包含大量数据。

局限性

  • 使用 importData 方法时不考虑公式,因为 CalcEngine 在这种情况下不起作用。 因此,单元格值设置为空。 如果公式在文件中存储了缓存值,GcExcel 将返回该值。

  • 如果工作表名称包含字符 !,例如“Sheet!1”,无法通过调用importData(worksheetName)来解析工作表名称,此函数返回null。