A. java程序導出word文檔,需要樣式設置為緊縮,跪求高手指點,代碼如下,求補充
1-apache的POI,此方法對Excel的導出做的很好,目前對Word的導出方面的功能尚未完全。
2-純JavaScript腳本實現。主要通過客戶端調用本機Office組件來實現。
3-在JSP頁面引入頭文件實現。
純JavaScript腳本實現細節方面大體是創建一個word組件ActiveXObject('Word.Application'),用js通過表ID取得表內容然後保存到word,要注意的是js實現有很多不好的地方,例如Internet選項需要把ActiveX空間全部啟用,安全級別設置為中。這樣的話豈不是每台機器都要配置一下。其次每次生成word文檔以後彈出對話框(無法保存此文件,因為它已在別處打開(C:\...\STARTUP\Powerword.dot)),出現此問題就需要把C:\Documents and Settings\當前用戶名\Application Data\Microsoft\Word\STARTUP下的Powerword.dot文件刪除,每次遇到此問題就需要刪除文件來解決,十分不方便。
JSP頁面引入來實現Word保存就方便多了,但是也有不足的地方,首先如果需要引入
<meta http-equiv="Content-Type" content="application/msword; charset=gb2312" />
如果需要下載的話就引入
<%@ page contentType="application/msword; charset=gb2312" %>
其實如果大家用框架做就方便多了,比如Struts2。在Action里直接寫如下代碼:
if(out!=null){
String fileName="";
fileName+="評價報告.doc";
try {
HttpServletResponse response = ServletActionContext.getResponse();
response.setHeader("Content-disposition","attachment; filename="+new String(fileName.getBytes("GB2312"), "8859_1"));
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
out是jsp頁面表單元素,一個button,用於提交表單到相應Action進行Word下載。Action設置jsp頁面頭文件。這樣每次點擊button就可以把相應jsp頁面的內容保存到Word中並且支持下載,Word中內容並且是可編輯狀態。
不足的地方在於由於表內容是動態生成,有的需要先查看在下載Word,就需要另外建立一個新JSP頁面進行Word下載,當然首先要在struts.xml里配置好頁面轉向。
新建立的頁面傳值同查看頁面要保持一樣。
B. 如何用java生成word
如果電腦里裝的有WORD,可以通過JS新建一個WORD,並把頁面文件拷貝進去。
我這有操作Excel的,word的差不多。
<input type="button" onclick="javascript:method1('tableExcel');" value="導入到EXCEL">
<SCRIPT LANGUAGE="javascript">
function method1(tableid) {//整個表格拷貝到EXCEL中
var curTbl = document.getElementById(tableid);
var oXL = new ActiveXObject("Excel.Application");
//創建AX對象excel
var oWB = oXL.Workbooks.Add();
//獲取workbook對象
var oSheet = oWB.ActiveSheet;
//激活當前sheet
var sel = document.body.createTextRange();
sel.moveToElementText(curTbl);
//把表格中的內容移到TextRange中
sel.select();
//全選TextRange中內容
sel.execCommand("Copy");
//復制TextRange中內容
oSheet.Paste();
//粘貼到活動的EXCEL中
oXL.Visible = true;
//設置excel可見屬性
}
function method2(tableid) //讀取表格中每個單元到EXCEL中
{
var curTbl = document.getElementById(tableid);
var oXL = new ActiveXObject("Excel.Application");
//創建AX對象excel
var oWB = oXL.Workbooks.Add();
//獲取workbook對象
var oSheet = oWB.ActiveSheet;
//激活當前sheet
var Lenr = curTbl.rows.length;
//取得表格行數
for (i = 0; i < Lenr; i++)
{
var Lenc = curTbl.rows(i).cells.length;
//取得每行的列數
for (j = 0; j < Lenc; j++)
{
oSheet.Cells(i + 1, j + 1).value = curTbl.rows(i).cells(j).innerText;
//賦值
}
}
oXL.Visible = true;
//設置excel可見屬性
}
function getXlsFromTbl(inTblId, inWindow) {
try {
var allStr = "";
var curStr = "";
//alert("getXlsFromTbl");
if (inTblId != null && inTblId != "" && inTblId != "null") {
curStr = getTblData(inTblId, inWindow);
}
if (curStr != null) {
allStr += curStr;
}
else {
alert("你要導出的表不存在!");
return;
}
var fileName = getExcelFileName();
doFileExport(fileName, allStr);
}
catch(e) {
alert("導出發生異常:" + e.name + "->" + e.description + "!");
}
}
function getTblData(inTbl, inWindow) {
var rows = 0;
//alert("getTblData is " + inWindow);
var tblDocument = document;
if (!!inWindow && inWindow != "") {
if (!document.all(inWindow)) {
return null;
}
else {
tblDocument = eval(inWindow).document;
}
}
var curTbl = tblDocument.getElementById(inTbl);
var outStr = "";
if (curTbl != null) {
for (var j = 0; j < curTbl.rows.length; j++) {
//alert("j is " + j);
for (var i = 0; i < curTbl.rows[j].cells.length; i++) {
//alert("i is " + i);
if (i == 0 && rows > 0) {
outStr += " \t";
rows -= 1;
}
outStr += curTbl.rows[j].cells[i].innerText + "\t";
if (curTbl.rows[j].cells[i].colSpan > 1) {
for (var k = 0; k < curTbl.rows[j].cells[i].colSpan - 1; k++) {
outStr += " \t";
}
}
if (i == 0) {
if (rows == 0 && curTbl.rows[j].cells[i].rowSpan > 1) {
rows = curTbl.rows[j].cells[i].rowSpan - 1;
}
}
}
outStr += "\r\n";
}
}
else {
outStr = null;
alert(inTbl + "不存在!");
}
return outStr;
}
function getExcelFileName() {
var d = new Date();
var curYear = d.getYear();
var curMonth = "" + (d.getMonth() + 1);
var curDate = "" + d.getDate();
var curHour = "" + d.getHours();
var curMinute = "" + d.getMinutes();
var curSecond = "" + d.getSeconds();
if (curMonth.length == 1) {
curMonth = "0" + curMonth;
}
if (curDate.length == 1) {
curDate = "0" + curDate;
}
if (curHour.length == 1) {
curHour = "0" + curHour;
}
if (curMinute.length == 1) {
curMinute = "0" + curMinute;
}
if (curSecond.length == 1) {
curSecond = "0" + curSecond;
}
var fileName = "leo_zhang" + "_" + curYear + curMonth + curDate + "_" + curHour + curMinute + curSecond + ".csv";
//alert(fileName);
return fileName;
}
function doFileExport(inName, inStr) {
var xlsWin = null;
if (!!document.all("glbHideFrm")) {
xlsWin = glbHideFrm;
}
else {
var width = 6;
var height = 4;
var openPara = "left=" + (window.screen.width / 2 - width / 2)
+ ",top=" + (window.screen.height / 2 - height / 2)
+ ",scrollbars=no,width=" + width + ",height=" + height;
xlsWin = window.open("", "_blank", openPara);
}
xlsWin.document.write(inStr);
xlsWin.document.close();
xlsWin.document.execCommand('Saveas', true, inName);
xlsWin.close();
}
</SCRIPT>
C. Java 將智能生成的試卷信息從資料庫導出並生成word文檔
直接在網上找個試卷模版,打開後另存為xml,重命名為***.jsp 在需要輸出的地方使用<%=user.name %>輸出,然後在末尾加這段代碼:<%@page contentType="application/msword; charset=UTF-8" %>
註:xml格式的word文件中首行內容
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
必須保證在jsp文件的第一行,否則導出的word將無法打開,提示格式錯誤
D. 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, Map<String, String> data) {
FileOutputStream out = null;
XWPFDocument doc = null;
try {
doc = new XWPFDocument(POIXMLDocument.openPackage(templatePath));
List<XWPFRun> listRun;
List<XWPFParagraph> 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, Map<String, 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 s = new ByteArrayInputStream(b);
POIFSFileSystem fs = new POIFSFileSystem();
DirectoryEntry directory = fs.getRoot();
directory.createDocument("WordDocument", s);
FileOutputStream ostream = new FileOutputStream(destFilePath);
fs.writeFilesystem(ostream);
s.close();
ostream.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
public static void main(String[] args) throws Exception {
Map<String, String> maps = new HashMap<String, 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 新生成的地址。
E. java用poi導出word文檔,我要導出一個表格,表格的單元格中還要有一個表格,請問怎麼實現
有個最簡單,不用使用任何 poi 或其他第三方類庫的方法生成 excel ,或 word ,
你把一個生成好的 word 例子用文件另存為 xml , docx 之類,然後你再直接用記事本去打開這個 docx ,你就會發現是 xml 格式,
這個時候,你在程序裡面就直接用普通代碼生成這個 xml 就可以了。
F. JAVA導出word文檔,在循環的時候只寫出第一次是為什麼
document.close(); // 這行要放在所有寫入操作完成之後進行
G. java freemarker引擎 導出word文檔
要生成的數據,在java後台必須是用Map格式,這個你檢查一下有沒有問題。如果有list,也要放到map裡面去。
HashMap<String,Object>dataMap=newHashMap<String,Object>();
Configurationconf=newConfiguration();
Templatet=conf.getTemplate(fileName);
FiledocFile=newFile(filePath+"/"+docName);
out=newOutputStreamWriter(newFileOutputStream(docFile),"UTF-8");
t.process(dataMap,out);
H. java導出word,默認打開時doc或者docx格式
到控制面板的功能和程序,點擊2003,點擊更改,修復,或者直接點擊2003的安裝程序進行修復也可以,這樣默認就是2003,而docx只有2010才能打開。
I. java方式導出word文檔需要修改文字樣式,跪求高手解決,急,在線等。
問題沒說清楚。
對於word的操作,如果是 docx 可以把 docx當做zip來解壓縮,解開後會得到文檔的xml文件,稍加琢磨可以理解其中的含義,修改後,再更新回原zip
J. java導出word文檔,但當實例化一個table跟Cell的時候,居然編譯不通過
package com.rye.test;
import java.awt.Color;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import com.lowagie.text.Cell;
import com.lowagie.text.Document;
import com.lowagie.text.DocumentException;
import com.lowagie.text.Font;
import com.lowagie.text.PageSize;
import com.lowagie.text.Paragraph;
import com.lowagie.text.Table;
import com.lowagie.text.rtf.RtfWriter2;
/**
* 創建word文檔 步驟:
* 1,建立文檔
* 2,創建一個書寫器
* 3,打開文檔
* 4,向文檔中寫入數據
* 5,關閉文檔
*/
public class WordDemo {
public WordDemo() {
}
/**
* @param args
*/
public static void main(String[] args) {
// 創建word文檔,並設置紙張的大小
Document document = new Document(PageSize.A4);
try {
RtfWriter2.getInstance(document,
new FileOutputStream("E:/word.doc"));
document.open();
//設置合同頭
Paragraph ph = new Paragraph();
Font f = new Font();
Paragraph p = new Paragraph("出口合同",
new Font(Font.NORMAL, 18, Font.BOLDITALIC, new Color(0, 0, 0)) );
p.setAlignment(1);
document.add(p);
ph.setFont(f);
// 設置中文字體
// BaseFont bfFont =
// BaseFont.createFont("STSongStd-Light",
"UniGB-UCS2-H",BaseFont.NOT_EMBEDDED);
// Font chinaFont = new Font();
/*
* 創建有三列的表格
*/
Table table = new Table(4);
document.add(new Paragraph("生成表格"));
table.setBorderWidth(1);
table.setBorderColor(Color.BLACK);
table.setPadding(0);
table.setSpacing(0);
/*
* 添加表頭的元素
*/
Cell cell = new Cell("表頭");//單元格
cell.setHeader(true);
cell.setColspan(3);//設置表格為三列
cell.setRowspan(3);//設置表格為三行
table.addCell(cell);
table.endHeaders();// 表頭結束
// 表格的主體
cell = new Cell("Example cell 2");
cell.setRowspan(2);//當前單元格占兩行,縱向跨度
table.addCell(cell);
table.addCell("1,1");
table.addCell("1,2");
table.addCell("1,3");
table.addCell("1,4");
table.addCell("1,5");
table.addCell(new Paragraph("用java生成的表格1"));
table.addCell(new Paragraph("用java生成的表格2"));
table.addCell(new Paragraph("用java生成的表格3"));
table.addCell(new Paragraph("用java生成的表格4"));
document.add(new Paragraph("用java生成word文件"));
document.add(table);
document.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (DocumentException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
看看有沒有導錯包
導包快捷鍵 Ctrl + o