当前位置: 首页 > 知识库问答 >
问题:

使用POI java将HTML表格数据转换为Excel单元格

乐欣可
2023-03-14

您能告诉我如何使用java中的ApachePOI将html表数据呈现到Excel单元格中吗。我有以下要求,比如。。

<table border="1" cellpadding="1" cellspacing="1" style="width:500px;">
<tbody>
<tr>
<td>details</td>
<td>testing</td>
</tr>
<tr><td>1</td>
<td>220</td>
</tr>
<tr><td>3</td>
<td>4</td>
<td>10</td>
</tr></tbody>
</table>

但它只是作为文本字符串...在这里输入图像描述

共有1个答案

戚翰飞
2023-03-14

这里基本上需要解析HTML并将其转换为数据行,然后最后写入excel。我将向您展示如何使用Gradle、Jsoup和ApachePOI实现这一点

在build.gradle中需要以下依赖项

    implementation 'org.apache.poi:poi:5.0.0'
    implementation 'org.apache.poi:poi-ooxml:5.0.0'
    implementation group: 'org.jsoup', name: 'jsoup', version: '1.11.3'

这是转换和写入excel的代码

import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFFont;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

public class Test {

    public static void main(String[] args) throws IOException {
        //HTML to Data
        String data = "<table border=\"1\" cellpadding=\"1\" cellspacing=\"1\" style=\"width:500px;\">\n" +
            "<tbody>\n" +
            "<tr>\n" +
            "<td>details</td>\n" +
            "<td>testing</td>\n" +
            "</tr>\n" +
            "<tr><td>1</td>\n" +
            "<td>220</td>\n" +
            "</tr>\n" +
            "<tr><td>3</td>\n" +
            "<td>4</td>\n" +
            "<td>10</td>\n" +
            "</tr></tbody>\n" +
            "</table>";
        Document doc = Jsoup.parse(data);
        Element table = doc.select("table").get(0); //select the first table.
        Elements rows = table.select("tr");
        Element headerRow = rows.get(0);
        List<String> headers = new ArrayList<>();
        List<List<String>> dataRows = new ArrayList<>();
        Elements headerColumns = headerRow.select("td");
        for (int l = 0; l < headerColumns.size(); l++) {
            headers.add(headerColumns.get(l).text());
        }
        System.out.println(headers);
        for (int i = 1; i < rows.size(); i++) {
            Element row = rows.get(i);
            Elements cols = row.select("td");
            List<String> dataRow = new ArrayList<>();
            for (int j = 0; j < cols.size(); j++) {
                dataRow.add(cols.get(j).text());
            }
            dataRows.add(dataRow);
        }
        //Data to excel
        Workbook workbook = new XSSFWorkbook();
        Sheet sheet = workbook.createSheet("data");
        Row header = sheet.createRow(0);
        for (int k = 0; k < headers.size(); k++) {
            Cell headerCell = header.createCell(k);
            headerCell.setCellValue(headers.get(k));
        }

        for (int i = 0; i < dataRows.size(); i++) {
            Row r = sheet.createRow(i + 1);
            List<String> d = dataRows.get(i);
            for (int j = 0; j < d.size(); j++) {
                Cell dataCell = r.createCell(j);
                dataCell.setCellValue(d.get(j));
           }
        }

        File currDir = new File(".");
        String path = currDir.getAbsolutePath();
        String fileLocation = path.substring(0, path.length() - 1) + "Data.xlsx";

        FileOutputStream outputStream = new FileOutputStream(fileLocation);
        workbook.write(outputStream);
        workbook.close();
    }

}
 类似资料:
  • 我有一个excel表格,有n行6列,我需要将所有这些行插入数据库表。所以我想把每一行的单元格转换成逗号分隔,并用引号列表标记。此外,如果任何单元格为空,则其值应标记为空字符串(“”) 示例:示例图像

  • 问题内容: 是否有任何jQuery或javascript库根据给定的json数据生成动态表?我不想定义列,该库应该读取json哈希中的键并生成列。 当然,我可以自己遍历json数据并生成html表。我只想知道是否存在可以简单重用的此类库。 问题答案: 感谢大家的答复,这使用jQuery。 程式码片段:

  • pre { white-space: pre-wrap; } 本实例演示如何转换表格(table)为数据网格(datagrid)。 数据网格(datagrid)的列信息是定义在 <thead> 标记中,数据是定义在 <tbody> 标记中。确保为所有的数据列设置 field 名称,请看下面的实例:     <table id="tt">         <thead>             <

  • 问题内容: 如何使用PHP将html转换为word / excel / powerpoint? 问题答案: 尝试以下PHP类: Php电子表格 PHPWord PHP演示 到目前为止,我仅使用PHPExcel,但它工作得很好并且易于学习。由于所有课程均来自同一家公司,因此我认为它们也应满足您的需求。

  • 我对Spark SQL很陌生。在执行一项培训任务时,我遇到了以下问题,无法找到答案(以下所有示例都有点愚蠢,但出于演示目的,应该仍然可以)。 我的应用程序读取拼花文件并根据其内容创建数据集: 数据集。show()调用结果: 然后,我将数据集转换为一个新的数据集,其中包含Person类型: 哪里 最后,当我显示数据集的内容时,我希望看到 然而,我明白了 这是toString()方法的结果,而标头是正

  • 问题内容: 我的表格格式 我在网上找到了以下代码。但是,如果我使用“ thead”和“ tbody”标签,那是行不通的 问题答案: 您在Internet上找到的解决方案无法正常工作的原因是因为线路开始。该变量只有两个元素,是和。该行正在寻找内的所有元素是。你能做的最好的事情就是给一个id你和然后抓住所有基于该值。说您有: 然后对标记执行相同的操作 编辑:我也强烈建议使用jQuery。它将缩短为: