如何在Java中使用API从Excel电子表格中获取单元格数据

本文介绍了如何利用OpenXML标准提高Excel文件的可访问性,并通过编程和WebAPIs实现从XLSX文件中提取、操作和共享数据。开发者可以选择自定义代码或借助现成库,如云mersiveAPI,以简化与Excel文档的交互过程。
摘要由CSDN通过智能技术生成

我们的Excel电子表格在其数十、数百甚至数千个单元格和行中保存了大量有价值的数据。有了这么多干净、格式化的数字数据可供我们使用,我们就要找到程序性的方法来提取这些数据,并在文件生态系统中的其他重要文档之间共享这些数据。

令人欣慰的是,当微软将其文件表示标准转换为OpenXML超过15年前。这种基于XML的开源方法极大地提高了所有Office文档内容的可访问性,其结构基于大多数软件开发人员都非常熟悉的众所周知的技术,即Zip和XML。在此之前,Excel(XLS)文件以二进制文件格式BIFF(二进制交换文件格式)存储,其他专有二进制格式用于表示Word(DOC)等其他办公文件。

对开放文档标准的这一更改使开发人员能够构建能够以有意义的方式直接与Office文档交互的应用程序。例如,要获取特定Excel工作簿的结构信息,开发人员可以编写代码来访问XLSX文件结构并获取他们需要的所有工作簿元数据。类似地,要获取特定的工作表数据,他们可以访问XL/worksheets/(sheet name)。xml,知道该表中的每个单元格和值将由简单的《c》和《v》元素表示,所有相关数据都嵌套在这些元素中。这有点过于简化了,但它指出了导航一系列压缩XML文件路径的容易程度。

鉴于Excel文件在全球的流行,构建(或简单地扩展)应用程序来加载、操作和提取XLSX中的内容是显而易见的。有许多现代应用程序可以无缝加载和操作XLSX文件,许多应用程序甚至提供了以XLSX格式导出文件的选项。

当我们着手构建与Excel文档交互的应用程序时,我们有几种选择。我们可以选择编写代码来筛选OpenXML文档格式,或者我们可以下载专门的编程库,或者我们可以调用专门设计的web API来代表我们处理特定的文档交互。前两个选项可以帮助我们保持代码本地化,但它们会占用大量的键盘时间,并且运行成本会有所增加。使用后一种选择,我们可以将编码和处理开销卸载到外部服务中,以小部分麻烦获得所有好处。也许最有益的是,我们可以使用蜜蜂为了节省时间并快速启动我们的应用程序原型。

示范
在本文的剩余部分,我将快速演示两个免费使用的web APIs,它们允许我们以稍微不同的方式从XLSX电子表格的特定单元格中检索内容。下面提供了现成的Java代码,使我们的调用结构变得简单明了。

这两个API都将返回关于目标单元格的信息,包括单元格路径、单元格文本值、单元格标识符、单元格样式索引以及该单元格中使用的公式(如果有的话)。有了响应对象中的信息,我们可以随后请求应用程序在电子表格和其他开放标准文件之间共享数据,用于各种目的。

方便的是,两个API请求都可以使用相同的免费API密钥进行授权。还需要注意的是,这两个API都处理内存中的文件数据,并在请求完成时释放该数据。这使得这两种请求都非常快速和安全。

这两个API解决方案中的第一个将使用请求中的行索引和单元格索引来定位我们想要的数据。第二种解决方案将改为使用小区标识符(即A1、B1、C1等。)出于同样的目的。虽然单元格索引和单元格标识符通常被认为是可以互换的(两者都将特定单元格定位在Excel工作表中的特定位置),但使用单元格索引可以使我们的应用程序更容易动态适应文档中的任何更改,而单元格标识符将始终保持静态。

为了使用这些API,我们将从安装SDK开始专家。我们可以首先在pom.xml中添加对存储库的引用:

<repositories>
    <repository>
        <id>jitpack.io</id>
        <url>https://jitpack.io</url>
    </repository>
</repositories>

然后我们可以在pom.xml中添加对依赖关系的引用:

<dependencies>
<dependency>
    <groupId>com.github.Cloudmersive</groupId>
    <artifactId>Cloudmersive.APIClient.Java</artifactId>
    <version>v4.25</version>
</dependency>
</dependencies>

安装完成后,我们可以构造请求参数,并使用现成的Java代码示例进行API调用。要使用行索引和单元格索引检索单元格数据,我们可以像下面的应用程序/JSON示例一样格式化我们的请求参数:

{
  "InputFileBytes": "string",
  "InputFileUrl": "string",
  "WorksheetToQuery": {
    "Path": "string",
    "WorksheetName": "string"
  },
  "RowIndex": 0,
  "CellIndex": 0
}

一旦设置了参数,我们就可以使用下面的代码来调用API:

// Import classes:
//import com.cloudmersive.client.invoker.ApiClient;
//import com.cloudmersive.client.invoker.ApiException;
//import com.cloudmersive.client.invoker.Configuration;
//import com.cloudmersive.client.invoker.auth.*;
//import com.cloudmersive.client.EditDocumentApi;

ApiClient defaultClient = Configuration.getDefaultApiClient();

// Configure API key authorization: Apikey
ApiKeyAuth Apikey = (ApiKeyAuth) defaultClient.getAuthentication("Apikey");
Apikey.setApiKey("YOUR API KEY");
// Uncomment the following line to set a prefix for the API key, e.g. "Token" (defaults to null)
//Apikey.setApiKeyPrefix("Token");

EditDocumentApi apiInstance = new EditDocumentApi();
GetXlsxCellRequest input = new GetXlsxCellRequest(); // GetXlsxCellRequest | Document input request
try {
    GetXlsxCellResponse result = apiInstance.editDocumentXlsxGetCellByIndex(input);
    System.out.println(result);
} catch (ApiException e) {
    System.err.println("Exception when calling EditDocumentApi#editDocumentXlsxGetCellByIndex");
    e.printStackTrace();
}

要使用单元格标识符检索单元格数据,我们可以像下面的应用程序/JSON示例一样格式化我们的请求参数:

{
  "InputFileBytes": "string",
  "InputFileUrl": "string",
  "WorksheetToQuery": {
    "Path": "string",
    "WorksheetName": "string"
  },
  "CellIdentifier": "string"
}

一旦设置了参数,我们可以使用下面的最终代码示例来构建API调用:

// Import classes:
//import com.cloudmersive.client.invoker.ApiClient;
//import com.cloudmersive.client.invoker.ApiException;
//import com.cloudmersive.client.invoker.Configuration;
//import com.cloudmersive.client.invoker.auth.*;
//import com.cloudmersive.client.EditDocumentApi;

ApiClient defaultClient = Configuration.getDefaultApiClient();

// Configure API key authorization: Apikey
ApiKeyAuth Apikey = (ApiKeyAuth) defaultClient.getAuthentication("Apikey");
Apikey.setApiKey("YOUR API KEY");
// Uncomment the following line to set a prefix for the API key, e.g. "Token" (defaults to null)
//Apikey.setApiKeyPrefix("Token");

EditDocumentApi apiInstance = new EditDocumentApi();
GetXlsxCellByIdentifierRequest input = new GetXlsxCellByIdentifierRequest(); // GetXlsxCellByIdentifierRequest | Document input request
try {
    GetXlsxCellByIdentifierResponse result = apiInstance.editDocumentXlsxGetCellByIdentifier(input);
    System.out.println(result);
} catch (ApiException e) {
    System.err.println("Exception when calling EditDocumentApi#editDocumentXlsxGetCellByIdentifier");
    e.printStackTrace();
}

这就是我们需要的所有代码。有了可供我们使用的实用程序API,我们可以立即启动并运行我们的项目。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小徐博客

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值