`
53873039oycg
  • 浏览: 842072 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

[简单]poi 创建word 2007表格(oracle)

    博客分类:
  • poi
 
阅读更多

      

import java.io.BufferedReader;
import java.io.FileOutputStream;
import java.io.Reader;
import java.math.BigInteger;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;
import org.apache.commons.lang3.StringUtils;
import org.apache.poi.xwpf.usermodel.BreakType;
import org.apache.poi.xwpf.usermodel.XWPFDocument;
import org.apache.poi.xwpf.usermodel.XWPFParagraph;
import org.apache.poi.xwpf.usermodel.XWPFTable;
import org.apache.poi.xwpf.usermodel.XWPFTableCell;
import org.apache.poi.xwpf.usermodel.XWPFTableRow;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTJc;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTShd;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTTbl;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTTblPr;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTTblWidth;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTTc;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTTcPr;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.STJc;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.STMerge;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.STShd;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.STTblWidth;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.STVerticalJc;

public class POI_创建Oracle表文档_S4_Test {
	public static void main(String[] args) throws Exception {
		POI_创建Oracle表文档_S4_Test t = new POI_创建Oracle表文档_S4_Test();
		t.createSimpleTableDocx("f:/saveFile/temp/sys_table_"
				+ System.currentTimeMillis() + ".docx");
	}

	public void createSimpleTableDocx(String savePath) throws Exception {
		XWPFDocument xdoc = new XWPFDocument();
		OracleTableInfo_S3 s3 = new OracleTableInfo_S3();
		List<List<String>> tableList = s3.getUserAllTable();
		for (int i = 0, len = tableList.size(); i < len; i++) {
			List<String> tableInfo = tableList.get(i);
			System.out.println("-----------=" + tableInfo.get(0));
			List<List<String>> tableColumnList = s3
					.getTableColumnInfo(tableInfo.get(0));
			createOracleTableInfo(xdoc, tableInfo, tableColumnList);
			addNewPage(xdoc, BreakType.COLUMN);
		}
		saveDocument(xdoc, savePath);
	}

	public void createOracleTableInfo(XWPFDocument xdoc,
			List<String> tableInfo, List<List<String>> tableColumnList) {
		XWPFTable xTable = xdoc.createTable(3 + tableColumnList.size(), 6);
		setTableWidth(xTable, "8000");
		int[] colWidthArr = new int[] { 1500, 3000, 1200, 850, 600, 850 };
		String[] colInfo = new String[] { "列名", "注释", "类型", "默认值", "空值", "主键" };
		XWPFTableRow row = xTable.getRow(2);
		row.setHeight(380);
		createColumnTitle(row, colInfo, colWidthArr);
		row = xTable.getRow(0);
		row.setHeight(380);
		setRowCellText(row.getCell(0), "中文名称", colWidthArr[0], true, 3,
				"BFBFBF", STVerticalJc.CENTER, STJc.CENTER);
		setRowCellText(row.getCell(1), "", colWidthArr[1], false, 0, null,
				STVerticalJc.CENTER, STJc.CENTER);
		setRowCellText(row.getCell(2), "英文名称", colWidthArr[2], true, 3,
				"BFBFBF", STVerticalJc.CENTER, STJc.CENTER);
		setRowCellText(row.getCell(3), tableInfo.get(0), colWidthArr[3], false,
				0, null, STVerticalJc.CENTER, STJc.CENTER);
		mergeCellsHorizontal(xTable, 0, 3, 5);
		row = xTable.getRow(1);
		row.setHeight(380);
		setRowCellText(row.getCell(0), "功能描述", colWidthArr[0], true, 3,
				"BFBFBF", STVerticalJc.CENTER, STJc.CENTER);
		setRowCellText(row.getCell(1), tableInfo.get(1), colWidthArr[1], false,
				0, null, STVerticalJc.CENTER, STJc.LEFT);
		mergeCellsHorizontal(xTable, 1, 1, 5);
		for (int i = 0, len = tableColumnList.size(); i < len; i++) {
			row = xTable.getRow(3 + i);
			row.setHeight(380);
			List<String> columnList = tableColumnList.get(i);
			for (int j = 0, jlen = columnList.size(); j < jlen; j++) {
				setRowCellText(row.getCell(j), columnList.get(j),
						colWidthArr[j], false, 0, null, STVerticalJc.CENTER,
						STJc.CENTER);
			}
		}
	}

	public void createColumnTitle(XWPFTableRow row, String[] colInfo,
			int[] colWidthArr) {
		for (int i = 0, len = colInfo.length; i < len; i++) {
			setRowCellText(row.getCell(i), colInfo[i], colWidthArr[i], true, 3,
					"BFBFBF", STVerticalJc.CENTER, STJc.CENTER);
		}
	}

	// 设置单元格文字
	public void setRowCellText(XWPFTableCell cell, String text, int width,
			boolean isShd, int shdValue, String shdColor, STVerticalJc.Enum jc,
			STJc.Enum stJc) {
		CTTc cttc = cell.getCTTc();
		CTTcPr ctPr = cttc.isSetTcPr() ? cttc.getTcPr() : cttc.addNewTcPr();
		CTShd ctshd = ctPr.isSetShd() ? ctPr.getShd() : ctPr.addNewShd();
		CTTblWidth cTblWidth = ctPr.addNewTcW();
		cTblWidth.setW(BigInteger.valueOf(width));
		cTblWidth.setType(STTblWidth.Enum.forString("dxa"));
		if (isShd) {
			if (shdValue > 0 && shdValue <= 38) {
				ctshd.setVal(STShd.Enum.forInt(shdValue));
			}
			if (shdColor != null) {
				ctshd.setColor(shdColor);
			}
		}
		ctPr.addNewVAlign().setVal(jc);
		cttc.getPList().get(0).addNewPPr().addNewJc().setVal(stJc);
		cell.setText(text);
	}

	// 跨列合并单元格
	public void mergeCellsHorizontal(XWPFTable table, int row, int fromCell,
			int toCell) {
		for (int cellIndex = fromCell; cellIndex <= toCell; cellIndex++) {
			XWPFTableCell cell = table.getRow(row).getCell(cellIndex);
			if (cellIndex == fromCell) {
				// The first merged cell is set with RESTART merge value
				cell.getCTTc().addNewTcPr().addNewHMerge()
						.setVal(STMerge.RESTART);
			} else {
				// Cells which join (merge) the first one, are set with CONTINUE
				cell.getCTTc().addNewTcPr().addNewHMerge()
						.setVal(STMerge.CONTINUE);
			}
		}
	}

	public void setTableWidth(XWPFTable table, String width) {
		CTTbl ttbl = table.getCTTbl();
		CTTblPr tblPr = ttbl.getTblPr() == null ? ttbl.addNewTblPr() : ttbl
				.getTblPr();
		CTTblWidth tblWidth = tblPr.isSetTblW() ? tblPr.getTblW() : tblPr
				.addNewTblW();
		CTJc cTJc = tblPr.addNewJc();
		cTJc.setVal(STJc.Enum.forString("center"));
		tblWidth.setW(new BigInteger(width));
		tblWidth.setType(STTblWidth.DXA);
	}

	public void addNewPage(XWPFDocument document, BreakType breakType) {
		XWPFParagraph xp = document.createParagraph();
		xp.createRun().addBreak(breakType);
	}

	public void saveDocument(XWPFDocument document, String savePath)
			throws Exception {
		FileOutputStream fos = new FileOutputStream(savePath);
		document.write(fos);
		fos.close();
	}
}

class OracleTableInfo_S3 {
	public List<List<String>> getUserAllTable() throws Exception {
		Connection conn = getOracleConnection();
		String sql = "select table_name,comments from user_tab_comments";
		PreparedStatement ps = null;
		ResultSet rs = null;
		ps = conn.prepareStatement(sql);
		rs = ps.executeQuery();
		List<List<String>> tableList = new ArrayList<List<String>>();
		while (rs.next()) {
			List<String> resultList = new ArrayList<String>();
			resultList.add(rs.getString(1));
			if (StringUtils.isNotBlank(rs.getString(2))) {
				resultList.add(rs.getString(2));
			} else {
				resultList.add("");
			}
			tableList.add(resultList);
		}
		closeConnection(rs, null, conn);
		return tableList;
	}

	public List<List<String>> getTableColumnInfo(String tableName)
			throws Exception {
		Connection conn = getOracleConnection();
		String sql = "select a.column_name as column_name, b.comments,a.data_type || '(' || nvl(a.data_precision, a.data_length) || (case when a.data_scale > 0 then ',' || a.data_scale end) || ')' as data_type, a.data_default, a.nullable, (select decode(d.constraint_type, 'P','Y','')  from all_constraints d, all_cons_columns c where d.constraint_type in ('P') and d.status = 'ENABLED' and d.constraint_name = c.constraint_name and d.owner = c.owner and c.column_name = a.column_name and c.table_name = a.table_name) as key_type from user_tab_columns a, user_col_comments b where a.column_name = b.column_name and a.table_name = b.table_name and b.table_name = upper('"
				+ tableName + "')";
		PreparedStatement ps = null;
		ResultSet rs = null;
		ps = conn.prepareStatement(sql);
		rs = ps.executeQuery();
		Reader reader;
		List<List<String>> columnList = new ArrayList<List<String>>();
		while (rs.next()) {
			List<String> resultList = new ArrayList<String>();
			resultList.add(rs.getString(1));
			resultList.add(rs.getString(2));
			resultList.add(rs.getString(3));
			reader = rs.getCharacterStream(4);
			if (reader != null) {
				BufferedReader br = new BufferedReader(reader);
				StringBuffer sb = new StringBuffer();
				String temp;
				while ((temp = br.readLine()) != null) {
					sb.append(temp);
				}
				if (sb.length() > 0) {
					resultList.add(sb.toString());
				} else {
					resultList.add("");
				}
			} else {
				resultList.add("");
			}
			resultList.add(rs.getString(5));
			resultList.add(rs.getString(6));
			columnList.add(resultList);
		}
		for (List<String> list : columnList) {
			System.out.println(list);
		}
		closeConnection(rs, null, conn);
		return columnList;
	}

	public void closeConnection(ResultSet rs, Statement statement,
			Connection conn) {
		try {
			if (rs != null) {
				rs.close();
			}
			if (statement != null) {
				statement.close();
			}
			if (conn != null) {
				conn.close();
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}

	public Connection getOracleConnection() {
		String driver = "oracle.jdbc.driver.OracleDriver";
		String url = "jdbc:oracle:thin:@localhost:1521:xe";// 要操作的数据库名称
		String username = "admin";// 数据库用户名
		String password = "123456";// 密码
		return getConnection(driver, url, username, password);
	}

	public Connection getConnection(String driver, String url, String userName,
			String passwd) {
		Connection conn = null;
		try {
			Class.forName(driver);
			conn = DriverManager.getConnection(url, userName, passwd);
		} catch (Exception e) {
			e.printStackTrace();
		}
		return conn;
	}
}

 

    结果为:

   

 

  • 大小: 60.8 KB
分享到:
评论

相关推荐

    MySql 和Oracle 数据库结构导出Word

    4. 构建Word文档:可以使用Apache POI库来操作Word文档,将数据库结构信息插入到文档中,形成清晰的表格或列表。 5. 存储和导出:最后,将生成的Word文档保存到本地,供用户查看或分享。 这个项目可能已经封装了...

    POI 数据库转Word文档

    使用数据库链接 ,将Oracle或者Mysql数据库的表信息 展示在...生成数据字典,使用poi,形成有图片,表格,目录。字体等的word文档 ,其中使用了harry12800.tree2word项目。完整的项目jdk1.7.导入直接运行,有sample。

    Oracle-POI上传

    - POI可以用来创建、读取、更新Excel文件,并支持复杂的表格操作。 2. **Oracle JDBC驱动** - JDBC(Java Database Connectivity)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问。 - ...

    提取Oracle字段信息(包括字段名,数据类型,备注)并写入word表格

    以下代码示例展示了如何使用Apache POI创建一个Word表格并填充数据: ```java import org.apache.poi.xwpf.usermodel.*; public class WordTableWriter { public static void writeTableToWord(List&lt;TableField&gt; ...

    ORACLE驱动程序JAR包下载 解决编辑器内WORD特殊格式粘贴问题

    在某些情况下,开发人员可能需要从Word文档中复制含有特定格式(如表格、图片、超链接等)的数据,然后粘贴到应用程序的数据库管理界面。由于Word的富文本格式与数据库中的纯文本或HTML格式不兼容,可能会导致粘贴...

    org.apache.poi

    Oracle官方网站上提供的`org.apache.poi.jar`包正是这个项目的二进制发行版,包含了处理Office文档所需的所有Java类和方法。 在Java开发中,Apache POI 提供了一套完整的API,使得开发者可以方便地读取、写入和修改...

    importddd.rar

    以下是一个使用Apache POI创建Word表格的基本步骤: 1. 创建`XSSFWorkbook`对象代表Word文档。 2. 创建`XSSFSheet`对象代表工作表。 3. 创建`XSSFRow`对象代表表格行。 4. 在每一行中创建`XSSFCell`对象并设置内容...

    ADF2007导出

    Excel 2007是Microsoft Office系列中的一个电子表格软件,它使用XLSX格式来存储数据。为了实现Excel 2007文件的导出,我们需要使用POI库。 POI(Apache POI)是一个Java库,由Apache软件基金会提供,用于读取和写入...

    XOffice 数据生成WORD

    这是一种常见的数据管理操作,用于将Excel表格中的数据转移到关系型数据库中,如MySQL、SQL Server或Oracle。这通常涉及到读取Excel文件,解析其内容,然后使用SQL语句插入到数据库表中。Python的pandas库、Java的...

    自定义生产数据表字段说明文档

    使用Apache POI库,可以创建和编辑Word和Excel文件,将字段和字段说明以表格形式呈现,方便用户查看和打印。Excel特别适合于数据分析,Word则可用于创建更结构化的报告。 7. **安全性与权限管理**: 在生成和导出...

    jdk-8u131-windows-x64.exe

    Apache POI提供了一套丰富的API,可以对Word文档进行操作,包括创建表格、插入文本、设置样式等。 【标签】"java jdk"表明这是关于Java语言和其开发工具包的讨论。Java是一种广泛使用的面向对象的编程语言,具有跨...

    【转】通用从数据库导出excel、excel导入数据库组件

    3. poi-3.9-20121203.jar:Apache POI主库,提供对Excel、Word、PowerPoint等文件格式的支持。 4. poi-scratchpad-3.9-20121203.jar:POI的实验模块,包含一些未成熟或仍在开发的功能。 5. poi-ooxml-3.9-20121203....

    ssh项目必备jar包(二)

    1. **ooxml-schemas-1.1.jar**:这个库包含了Microsoft Office Open XML (OOXML) 的XML模式定义,主要用于解析和生成OOXML格式的文件,如Word文档、Excel表格和PowerPoint演示文稿。在处理与Office文档交互的场景中...

    SOAOFFICE - 微软 OFFICE 中间件

    SOAOffice 完全抛弃了传统利用Office服务器端自动化技术存取文档数据的种种弊端和缺陷,采用独创的专利技术构建了一个功能强大、简单易用的微软Office中间件平台,平台提供标准的.net和java组件接口,不但能够在线...

    ADF Execl导入导出方法

    本篇主要介绍如何利用Oracle Application Development Framework (ADF)结合Apache POI库实现Excel文件的导出功能。通过分析提供的代码片段,我们将详细了解其实现机制,并探讨关键类和方法的作用。 #### 核心概念 ...

    自写FreeMarker导出数据为EXcel实例

    这意味着在实现功能前,你需要在数据库中创建对应的表格结构,以存储要导出的数据。确保表格的字段与FreeMarker模板中使用的变量相匹配。 5. **FreeMarker模板设计**: 在FreeMarker模板文件(可能命名为`export....

    springweb框架需要jar包大全

    2. poi-ooxml-schemas-3.8-beta3-20110606.jar、xmlbeans-2.3.0.jar:Apache POI项目提供的库,用于读写Microsoft Office格式的文件,如Excel、Word。这些jar包允许你在Spring Web应用中处理和生成Excel表格数据。 ...

    农业农村部特聘审计员推荐表.doc

    在IT领域,掌握如何使用Word或其他办公软件创建可填写表单是非常实用的技能。此外,对于开发者来说,了解如何利用APIs或SDKs在程序中生成这些表单也非常重要。 ### 数据处理与存储 3. **数据采集**:此推荐表用于...

    java开发中各种jar包

    10. **Apache POI**: poi-xxx.jar是用于处理Microsoft Office文档(如Excel、Word)的库,可以在Java程序中读写Excel表格,创建Word文档等。 11. **Google Guava**: guava.jar是Google提供的一个强大的Java库,包含...

Global site tag (gtag.js) - Google Analytics