Java 如何将表格数据导入word文档中

网友投稿 320 2023-01-06

Java 如何将表格数据导入word文档中

java 表格数据导入word文档中

个人觉得这个功能实在搞笑,没什么意义,没办法提了需求就要实现,(太好说话了把我)

我的实现是再word中生成一个与 excel行,列 一样的一个表格,然后把从excel拿到的数据(exList参数)依次放到word表格中

public static void createFile(HttpServletResponse response, String fileName, List> exList) {

try {

setResponseHeader(response, fileName);

//生成一个word模版文件

XWPFDocument document = new XWPFDocument();

XWPFTable table = document.createTable(exList.size(), exList.get(0).size());

XWPFTableRow row;

for (int i = 0; i < exList.size(); i++) {

List sdf = exList.get(i);

row = table.getRow(i);

for (int j = 0; j < exList.get(i).size(); j++) {

String s =sdf.get(j);

row.getCell(j).setText(s);

row.getCell(j).setWidthType(TableWidthType.AUTO);

}

//将数据插入表格中 pos:0 表示 第一个表格

document.setTable(0,table);

}

ServletOutputStream outputStream = response.getOutputStream();

BufferedOutputStream bufferStream = new BufferedOutputStream(outputStream, 1024);

document.write(bufferStream);

document.close();

bufferStream.close();;

} catch (IOException e) {

e.printStackTrace();

}

}

public static void setResponseHeader(HttpServletResponse response, String name) {

try {

name = new String(name.getBytes(), "ISO8859-1");

} catch (UnsupportedEncodingException e) {

e.printStackTrace();

}

response.setContentType("multipart/form-data");

//要保存的文件名

response.setHeader("Content-Disposition", "attachment;filename=" + name + ".docx");

response.addHeader("Pargam", "no-cache");

response.addHeader("Cache-Control", "no-cache");

}

Java poi导入word表格数据的经过

一、过程及遇到的问题和解决思路

需要导入的是一个word文档,内容是以表格的形式保存在word中

1、poi对word表格的空格处可以自动识别出来并赋值为 " ",这一点比poi导入excel人性化(excel默认是跳过这个空格)

2、对于某些情况下,肉眼无法看出表格格式问题,但是程序可以识别出来,怀疑是表格后期人工修改过,导致表格外观没问题但是行列属性不一致,导致读取时遇到这些地方报错,解决思路:可以在读取每一行之前先判断列数是否正确,poi中可以获取每行的列数,不正确的证明此列有问题,舍弃跳过。

二、代码

org.apache.poi

poi

3.17

org.apache.poi

poi-ooxml

3.17

org.apache.poi

poi-scratchpad

3.17

package com.example.importtomysql;

import org.apache.poi.hwpf.HWPFDocument;

import org.apache.poi.hwpf.usermodel.*;

import java.io.File;

import java.io.FileInputStream;

import java.io.InputStream;

import java.util.ArrayList;

import java.util.List;

public class ImportWord {

public List testReadByDoc(String path) throws Exception {

File f = new File(path);

InputStream is = new FileInputStream(f);

HWPFDocument doc = new HWPFDocument(is);

//输出书签信息

// this.printInfo(doc.getBookmarks());

//输出文本

// System.out.println(doc.getDocumentText());

Range range = doc.getRange();

// this.printInfo(range);

//读表格

List tableColumns = this.readTable(range);

//读列表

// this.readList(range);

//把当前HWPFDocument写到输出流中

// doc.write(new FileOutputStream("D:\\temp\\test.doc"));

is.close();

return tableColumns;

}

/**

* 输出书签信息

* @param bookmarks

*/

private void printInfo(Bookmarks bookmarks) {

int count = bookmarks.getBookmarksCount();

System.out.println("书签数量:" + count);

Bookmark bookmark;

for (int i=0; i

bookmark = bookmarks.getBookmark(i);

System.out.println("书签" + (i+1) + "的名称是:" + bookmark.getName());

System.out.println("开始位置:" + bookmark.getStart());

System.out.println("结束位置:" + bookmark.getEnd());

}

}

/**

* 读表格

* 每一个回车符代表一个段落,所以对于表格而言,每一个单元格至少包含一个段落,每行结束都是一个段落。

* @param range

*/

private List readTable(Range range) {

List tableColumns = new ArrayList<>();

//遍历range范围内的table。

TableIterator tableIter = new TableIterator(range);

Table table;

TableRow row;

TableCell cell;

int i=0;

int k=0;

while (tableIter.hasNext()&&i<=1) {

table = tableIter.next();

int rowNum = table.numRows();

for (int j=0; j

TableColumn tableColumn = new TableColumn();

row = table.getRow(j);

int cellNum = row.numCells();

// for (int k=0; k

// cell = row.getCell(k, Row.MissingCellPolicy.CREATE_NULL_AS_BLANK);

//

// //输出单元格的文本

// System.out.println(cell.text().trim());

// }

k++;

if(12==cellNum){

tableColumn.setId(row.getCell(0).text().trim(zWCsVge));

tableColumn.setSscj(row.getCell(1).text().trim());

tableColumn.setQlfl(row.getCell(2).text().trim());

tableColumn.setXmmc(row.getCell(3).text().trim());

tableColumn.setZx(row.getCell(4).text().trim());

tableColumn.setBlx(row.getCell(5).text().trim());

tableColumn.setSsyj(row.getCell(6).text().trim());

tableColumn.setCbjg(row.getCell(7).text().trim());

tableColumn.setZrsx(row.getCell(8).text().trim());

tableColumn.setSxyj(row.getCell(9).text().trim());

tableColumn.setZzqx(row.getCell(10).text().trim());

tableColumn.setZzyj(row.getCell(11).text().trim());

// tableColumn.setBz(row.getCell(12).text().trim());

tableColumns.add(tableColumn);

if(679==k){

System.out.println(k +" " +row.getCell(0).text().trim()+" " +row.getCell(3).text().trim());

}

// System.out.println(k +" " +row.getCell(0).text().trim()+" "+row.getCell(3).text().trim());

}else {

System.out.println(k);

}

}

i++;

}

return tableColumns;

}

/**

* 读列表

* @param range

*/

private void readList(Range range) {

int num = range.numParagraphs();

Paragraph para;

for (int i=0; i

para = range.getParagraph(i);

if (para.isInList()) {

System.out.println("list: " + para.text());

}

}

}

/**

* 输出Range

* @param range

*/

private void printInfo(Range range) {

//获取段落数

int paraNum = range.numParagraphs();

System.out.println(paraNum);

for (int i=0; i

System.out.println("段落" + (i+1) + ":" + range.getParagraph(i).text());

}

int secNum = range.numSections();

System.out.println(secNum);

Section section;

for (int i=0; i

section = range.getSection(i);

System.out.println(section.getMarginLeft());

System.out.println(section.getMarginRight());

System.out.println(section.getMarginTop());

System.out.println(section.getMarginBottom());

System.out.println(section.getPageHeight());

System.out.println(section.text());

}

}

}

bookmark = bookmarks.getBookmark(i);

System.out.println("书签" + (i+1) + "的名称是:" + bookmark.getName());

System.out.println("开始位置:" + bookmark.getStart());

System.out.println("结束位置:" + bookmark.getEnd());

}

}

/**

* 读表格

* 每一个回车符代表一个段落,所以对于表格而言,每一个单元格至少包含一个段落,每行结束都是一个段落。

* @param range

*/

private List readTable(Range range) {

List tableColumns = new ArrayList<>();

//遍历range范围内的table。

TableIterator tableIter = new TableIterator(range);

Table table;

TableRow row;

TableCell cell;

int i=0;

int k=0;

while (tableIter.hasNext()&&i<=1) {

table = tableIter.next();

int rowNum = table.numRows();

for (int j=0; j

TableColumn tableColumn = new TableColumn();

row = table.getRow(j);

int cellNum = row.numCells();

// for (int k=0; k

// cell = row.getCell(k, Row.MissingCellPolicy.CREATE_NULL_AS_BLANK);

//

// //输出单元格的文本

// System.out.println(cell.text().trim());

// }

k++;

if(12==cellNum){

tableColumn.setId(row.getCell(0).text().trim(zWCsVge));

tableColumn.setSscj(row.getCell(1).text().trim());

tableColumn.setQlfl(row.getCell(2).text().trim());

tableColumn.setXmmc(row.getCell(3).text().trim());

tableColumn.setZx(row.getCell(4).text().trim());

tableColumn.setBlx(row.getCell(5).text().trim());

tableColumn.setSsyj(row.getCell(6).text().trim());

tableColumn.setCbjg(row.getCell(7).text().trim());

tableColumn.setZrsx(row.getCell(8).text().trim());

tableColumn.setSxyj(row.getCell(9).text().trim());

tableColumn.setZzqx(row.getCell(10).text().trim());

tableColumn.setZzyj(row.getCell(11).text().trim());

// tableColumn.setBz(row.getCell(12).text().trim());

tableColumns.add(tableColumn);

if(679==k){

System.out.println(k +" " +row.getCell(0).text().trim()+" " +row.getCell(3).text().trim());

}

// System.out.println(k +" " +row.getCell(0).text().trim()+" "+row.getCell(3).text().trim());

}else {

System.out.println(k);

}

}

i++;

}

return tableColumns;

}

/**

* 读列表

* @param range

*/

private void readList(Range range) {

int num = range.numParagraphs();

Paragraph para;

for (int i=0; i

para = range.getParagraph(i);

if (para.isInList()) {

System.out.println("list: " + para.text());

}

}

}

/**

* 输出Range

* @param range

*/

private void printInfo(Range range) {

//获取段落数

int paraNum = range.numParagraphs();

System.out.println(paraNum);

for (int i=0; i

System.out.println("段落" + (i+1) + ":" + range.getParagraph(i).text());

}

int secNum = range.numSections();

System.out.println(secNum);

Section section;

for (int i=0; i

section = range.getSection(i);

System.out.println(section.getMarginLeft());

System.out.println(section.getMarginRight());

System.out.println(section.getMarginTop());

System.out.println(section.getMarginBottom());

System.out.println(section.getPageHeight());

System.out.println(section.text());

}

}

}

TableColumn tableColumn = new TableColumn();

row = table.getRow(j);

int cellNum = row.numCells();

// for (int k=0; k

// cell = row.getCell(k, Row.MissingCellPolicy.CREATE_NULL_AS_BLANK);

//

// //输出单元格的文本

// System.out.println(cell.text().trim());

// }

k++;

if(12==cellNum){

tableColumn.setId(row.getCell(0).text().trim(zWCsVge));

tableColumn.setSscj(row.getCell(1).text().trim());

tableColumn.setQlfl(row.getCell(2).text().trim());

tableColumn.setXmmc(row.getCell(3).text().trim());

tableColumn.setZx(row.getCell(4).text().trim());

tableColumn.setBlx(row.getCell(5).text().trim());

tableColumn.setSsyj(row.getCell(6).text().trim());

tableColumn.setCbjg(row.getCell(7).text().trim());

tableColumn.setZrsx(row.getCell(8).text().trim());

tableColumn.setSxyj(row.getCell(9).text().trim());

tableColumn.setZzqx(row.getCell(10).text().trim());

tableColumn.setZzyj(row.getCell(11).text().trim());

// tableColumn.setBz(row.getCell(12).text().trim());

tableColumns.add(tableColumn);

if(679==k){

System.out.println(k +" " +row.getCell(0).text().trim()+" " +row.getCell(3).text().trim());

}

// System.out.println(k +" " +row.getCell(0).text().trim()+" "+row.getCell(3).text().trim());

}else {

System.out.println(k);

}

}

i++;

}

return tableColumns;

}

/**

* 读列表

* @param range

*/

private void readList(Range range) {

int num = range.numParagraphs();

Paragraph para;

for (int i=0; i

para = range.getParagraph(i);

if (para.isInList()) {

System.out.println("list: " + para.text());

}

}

}

/**

* 输出Range

* @param range

*/

private void printInfo(Range range) {

//获取段落数

int paraNum = range.numParagraphs();

System.out.println(paraNum);

for (int i=0; i

System.out.println("段落" + (i+1) + ":" + range.getParagraph(i).text());

}

int secNum = range.numSections();

System.out.println(secNum);

Section section;

for (int i=0; i

section = range.getSection(i);

System.out.println(section.getMarginLeft());

System.out.println(section.getMarginRight());

System.out.println(section.getMarginTop());

System.out.println(section.getMarginBottom());

System.out.println(section.getPageHeight());

System.out.println(section.text());

}

}

}

// cell = row.getCell(k, Row.MissingCellPolicy.CREATE_NULL_AS_BLANK);

//

// //输出单元格的文本

// System.out.println(cell.text().trim());

// }

k++;

if(12==cellNum){

tableColumn.setId(row.getCell(0).text().trim(zWCsVge));

tableColumn.setSscj(row.getCell(1).text().trim());

tableColumn.setQlfl(row.getCell(2).text().trim());

tableColumn.setXmmc(row.getCell(3).text().trim());

tableColumn.setZx(row.getCell(4).text().trim());

tableColumn.setBlx(row.getCell(5).text().trim());

tableColumn.setSsyj(row.getCell(6).text().trim());

tableColumn.setCbjg(row.getCell(7).text().trim());

tableColumn.setZrsx(row.getCell(8).text().trim());

tableColumn.setSxyj(row.getCell(9).text().trim());

tableColumn.setZzqx(row.getCell(10).text().trim());

tableColumn.setZzyj(row.getCell(11).text().trim());

// tableColumn.setBz(row.getCell(12).text().trim());

tableColumns.add(tableColumn);

if(679==k){

System.out.println(k +" " +row.getCell(0).text().trim()+" " +row.getCell(3).text().trim());

}

// System.out.println(k +" " +row.getCell(0).text().trim()+" "+row.getCell(3).text().trim());

}else {

System.out.println(k);

}

}

i++;

}

return tableColumns;

}

/**

* 读列表

* @param range

*/

private void readList(Range range) {

int num = range.numParagraphs();

Paragraph para;

for (int i=0; i

para = range.getParagraph(i);

if (para.isInList()) {

System.out.println("list: " + para.text());

}

}

}

/**

* 输出Range

* @param range

*/

private void printInfo(Range range) {

//获取段落数

int paraNum = range.numParagraphs();

System.out.println(paraNum);

for (int i=0; i

System.out.println("段落" + (i+1) + ":" + range.getParagraph(i).text());

}

int secNum = range.numSections();

System.out.println(secNum);

Section section;

for (int i=0; i

section = range.getSection(i);

System.out.println(section.getMarginLeft());

System.out.println(section.getMarginRight());

System.out.println(section.getMarginTop());

System.out.println(section.getMarginBottom());

System.out.println(section.getPageHeight());

System.out.println(section.text());

}

}

}

para = range.getParagraph(i);

if (para.isInList()) {

System.out.println("list: " + para.text());

}

}

}

/**

* 输出Range

* @param range

*/

private void printInfo(Range range) {

//获取段落数

int paraNum = range.numParagraphs();

System.out.println(paraNum);

for (int i=0; i

System.out.println("段落" + (i+1) + ":" + range.getParagraph(i).text());

}

int secNum = range.numSections();

System.out.println(secNum);

Section section;

for (int i=0; i

section = range.getSection(i);

System.out.println(section.getMarginLeft());

System.out.println(section.getMarginRight());

System.out.println(section.getMarginTop());

System.out.println(section.getMarginBottom());

System.out.println(section.getPageHeight());

System.out.println(section.text());

}

}

}

System.out.println("段落" + (i+1) + ":" + range.getParagraph(i).text());

}

int secNum = range.numSections();

System.out.println(secNum);

Section section;

for (int i=0; i

section = range.getSection(i);

System.out.println(section.getMarginLeft());

System.out.println(section.getMarginRight());

System.out.println(section.getMarginTop());

System.out.println(section.getMarginBottom());

System.out.println(section.getPageHeight());

System.out.println(section.text());

}

}

}

section = range.getSection(i);

System.out.println(section.getMarginLeft());

System.out.println(section.getMarginRight());

System.out.println(section.getMarginTop());

System.out.println(section.getMarginBottom());

System.out.println(section.getPageHeight());

System.out.println(section.text());

}

}

}

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:在SpringBoot中该如何配置拦截器
下一篇:动漫网站的开放api接口(动漫网站的开放api接口是什么)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~