本文目錄一覽:
- 1、java導出word表格
- 2、請教:java從資料庫獲取數據導出docx,有多個表格,請問怎麼導出?
- 3、有誰知道用java語言怎麼實現將word的doc格式文件轉換為docx格式的
- 4、java導出word,默認打開時doc或者docx格式
java導出word表格
首先我用的技術是 poi
這是代碼,一個工具類得調用
public class WordUtil {
/**
* 基於模板文件導出 word 文檔,此方法主要是用來處理文檔中需要替換的文本內容,對圖片和表格無效
*
* @param templatePath
* 模板文件的路徑,要求路徑中要包含全名,並且模板文件只能是 07 及以上格式,即 docx 的文件
* @param destFilePath
* 導出文件的存放路徑,包含文件名,例如,E:/test/小區公告.docx
* @param data
* 用來替換文檔中預定義的字元串,要求預定義的字元串與 data 中的 key 值要相同
*/
public static void exportWordByTemplate(String templatePath,
String destFilePath, MapString, String data) {
FileOutputStream out = null;
XWPFDocument doc = null;
try {
doc = new XWPFDocument(POIXMLDocument.openPackage(templatePath));
ListXWPFRun listRun;
ListXWPFParagraph listParagraphs = doc.getParagraphs();
for (int i = 0; i listParagraphs.size(); i++) {
listRun = listParagraphs.get(i).getRuns();
for (int j = 0; j listRun.size(); j++) {
if (data.get(listRun.get(j).getText(0)) != null) {
String val = data.get(listRun.get(j).getText(0));
listRun.get(j).setText(val, 0);
}
}
}
File destFile = new File(destFilePath);
if (!destFile.getParentFile().exists()) {
destFile.getParentFile().mkdirs();
}
out = new FileOutputStream(destFilePath);
doc.write(out);
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (out != null)
out.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
/**
* 基於模板文件導出 word 文檔,該方法支持03格式,但是此方法只能保留文檔內容,不能保留文檔中的樣式和圖片,建議將模板使用 07 的格式保存
*
* @param templatePath
* 模板文件的路徑
* @param destFilePath
* 導出文件的存放路徑,包含文件名,例如,E:/test/小區公告.doc
* @param data
* 用來替換文檔中預定義的字元串,要求預定義的字元串與 data 中的 key 值要相同
*/
public static void export03WordByTemplate(String templatePath,
String destFilePath, MapString, String data) {
try {
WordExtractor doc = new WordExtractor(new FileInputStream(
templatePath));
String content = doc.getText();
for (String key : data.keySet()) {
content = content.replaceAll(key, data.get(key));
}
byte b[] = content.getBytes();
ByteArrayInputStream bais = new ByteArrayInputStream(b);
POIFSFileSystem fs = new POIFSFileSystem();
DirectoryEntry directory = fs.getRoot();
directory.createDocument(“WordDocument”, bais);
FileOutputStream ostream = new FileOutputStream(destFilePath);
fs.writeFilesystem(ostream);
bais.close();
ostream.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
public static void main(String[] args) throws Exception {
MapString, String maps = new HashMapString, String();
maps.put(“appellation”, “萬達公寓業主:”);
maps.put(
“main_body”,
“輸出的內容”);
maps.put(“date”, “2013年1月23日”);
exportWordByTemplate(“E:/sss 2.docx”, “E:/test/test.doc”, maps);
}
}
“E:/sss 2.docx 模板存放的地址。
E:/test/test.doc 新生成的地址。
請教:java從資料庫獲取數據導出docx,有多個表格,請問怎麼導出?
第一步:如何用POI操作Excel
@Test
public void createXls() throws Exception{
//聲明一個工作薄
HSSFWorkbook wb = new HSSFWorkbook();
//聲明表
HSSFSheet sheet = wb.createSheet(“第一個表”);
//聲明行
HSSFRow row = sheet.createRow(7);
//聲明列
HSSFCell cel = row.createCell(3);
//寫入數據
cel.setCellValue(“你也好”);
FileOutputStream fileOut = new FileOutputStream(“d:/a/b.xls”);
wb.write(fileOut);
fileOut.close();
}
第二步:導出指定資料庫的所有表
分析:
1:某個數資料庫有多少表,表名是什麼?―――DataBaseMetadate.getMetadate().getTables(null,null,null,new String[]{Table}); – excel的文件名稱。
2:對每一個表進行select * 操作。 - 每一個sheet的名稱。
3:分析表結構,rs.getMetadate(); ResultSetMedated
4:多個列,列名是什麼.- 欄位名就是sheet的第一行信息。
5:獲取每一行的數據 – 放到sheet第一行以後。
@Test
public void export() throws Exception{
//聲明需要導出的資料庫
String dbName = “focus”;
//聲明book
HSSFWorkbook book = new HSSFWorkbook();
//獲取Connection,獲取db的元數據
Connection con = DataSourceUtils.getConn();
//聲明statemen
Statement st = con.createStatement();
//st.execute(“use “+dbName);
DatabaseMetaData dmd = con.getMetaData();
//獲取資料庫有多少表
ResultSet rs = dmd.getTables(dbName,dbName,null,new String[]{“TABLE”});
//獲取所有表名 - 就是一個sheet
ListString tables = new ArrayListString();
while(rs.next()){
String tableName = rs.getString(“TABLE_NAME”);
tables.add(tableName);
}
for(String tableName:tables){
HSSFSheet sheet = book.createSheet(tableName);
//聲明sql
String sql = “select * from “+dbName+”.”+tableName;
//查詢數據
rs = st.executeQuery(sql);
//根據查詢的結果,分析結果集的元數據
ResultSetMetaData rsmd = rs.getMetaData();
//獲取這個查詢有多少行
int cols = rsmd.getColumnCount();
//獲取所有列名
//創建第一行
HSSFRow row = sheet.createRow(0);
for(int i=0;icols;i++){
String colName = rsmd.getColumnName(i+1);
//創建一個新的列
HSSFCell cell = row.createCell(i);
//寫入列名
cell.setCellValue(colName);
}
//遍曆數據
int index = 1;
while(rs.next()){
row = sheet.createRow(index++);
//聲明列
for(int i=0;icols;i++){
String val = rs.getString(i+1);
//聲明列
HSSFCell cel = row.createCell(i);
//放數據
cel.setCellValue(val);
}
}
}
con.close();
book.write(new FileOutputStream(“d:/a/”+dbName+”.xls”));
}
有誰知道用java語言怎麼實現將word的doc格式文件轉換為docx格式的
如果只是文字的話,直接讀出來,然後用07的存回去,poi能實現。但是有目錄什麼的就麻煩了,03的讀出來目錄是一行代碼,就容易出問題
我用的poi正好在糾結,最後沒辦法,用按鍵精靈一個個轉的。有個word文檔批處理軟體貌似能做到,但是要收費。
下面的是我讀取word文字的代碼
03讀取:
InputStream
is
=
new
FileInputStream(docfile);
WordExtractor
ex
=
new
WordExtractor(is);
text
=
ex.getText();
System.out.println(text);
07讀取:
OPCPackage
opcPackage
=
POIXMLDocument.openPackage(docxfile.getAbsolutePath());
POIXMLTextExtractor
extractor
=
new
XWPFWordExtractor(opcPackage);
text
=
extractor.getText();
System.out.println(text);
最後:doc不一定是03的,也可能是07的
java導出word,默認打開時doc或者docx格式
到控制面板的功能和程序,點擊2003,點擊更改,修復,或者直接點擊2003的安裝程序進行修復也可以,這樣默認就是2003,而docx只有2010才能打開。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/286614.html