public class WordUtil {
/**
* 将内容写入word文档(限文本内容)
* @param str
* @param filename
* @return
*/
public static boolean writeWord(String str,String filename){
boolean flag = false;
POIFSFileSystem fs = new POIFSFileSystem();
try {
byte[] b = str.getBytes("utf-8");
ByteArrayInputStream in = new ByteArrayInputStream(b);
//解决中文乱码问题
DirectoryEntry directory = fs.getRoot();
directory.createDocument("WordDocument", in);
//输出
mkDir(filename);//先建好上级文件夹
FileOutputStream out = new FileOutputStream(filename);
fs.writeFilesystem(out);
in.close();
out.flush();
out.close();
flag = true;
} catch (IOException e1) {
e1.printStackTrace();
flag = false;
}
return flag;
}
/**
*创建word文档
*/
public static void createWord(String filename,String content,String[] title,List<Object[]> list){
XWPFDocument doc = new XWPFDocument();
createPparagraph(doc,content); //段落文本
if(title!=null){
createTable(doc,title,list); //表格
}
FileOutputStream out;
try {
mkDir(filename); //建好文件夹
out = new FileOutputStream(filename);
doc.write(out);
out.flush();
out.close();
System.out.println("创建word 成功");
} catch (FileNotFoundException e) {
e.printStackTrace();
System.out.println("文件不存在");
} catch (IOException e) {
e.printStackTrace();
System.out.println("创建word 失败");
}
}
/**
* 创建段落内容
* @param doc
* @param content
*/
public static void createPparagraph(XWPFDocument doc,String content){
//段落设置
XWPFParagraph p = doc.createParagraph();
p.setAlignment(ParagraphAlignment.CENTER); //水平对齐
p.setVerticalAlignment(TextAlignment.TOP); //垂直对齐
p.setStyle("");
//边框设置
p.setBorderBottom(Borders.DOUBLE);
p.setBorderTop(Borders.DOUBLE);
p.setBorderRight(Borders.DOUBLE);
p.setBorderLeft(Borders.DOUBLE);
p.setBorderBetween(Borders.SINGLE);
//字体设置
XWPFRun r = p.createRun();
r.setBold(true); //加粗
r.setFontFamily("Courier"); //字体样式
r.setUnderline(UnderlinePatterns.DOT_DOT_DASH); //下划线
r.setTextPosition(100); //位置
r.setText(content); //设置文本
}
/**
* 创建word表格(表格样式有限)
* @param doc
* @param title
* @param list
*/
public static void createTable(XWPFDocument doc,String[] title,List<Object[]> list){
int col = title.length; //表格列
//段落样式
XWPFParagraph p = doc.createParagraph();
p.setAlignment(ParagraphAlignment.CENTER);
p.setVerticalAlignment(TextAlignment.BASELINE);
/*******************创建表格 start********************/
XWPFTable table = doc.createTable(1,col);//创建表格
//添加表格标题
XWPFTableRow rowTitle = table.getRow(0);
for(int i=0;i<title.length;i++){
String s = title[i];
rowTitle.getCell(i).setParagraph(p); //样式
rowTitle.getCell(i).setText(s); //值
}
//添加表格数据
if(list!=null && list.size()>0){
for(int i=0;i<list.size();i++){
Object[] obj = list.get(i);
XWPFTableRow tr = table.createRow();
for(int j=0; j<obj.length;j++){
// 设置样式
tr.getCell(j).setParagraph(p);
// 设值
tr.getCell(j).setText(obj[j].toString());
}
}
}
/*******************创建表格 end********************/
}
/**
* 遍历取得word文档中的表格(只能取得表格中内容)
* @param file
*/
public static void readTable(String filename){
try{
FileInputStream in = new FileInputStream(filename);//载入文档
POIFSFileSystem fs = new POIFSFileSystem(in);
HWPFDocument doc = new HWPFDocument(fs);
Range range = doc.getRange();//得到文档的读取范围
TableIterator it = new TableIterator(range);
//迭代文档中的表格
while (it.hasNext()) {
Table tb = (Table) it.next();
//迭代行,默认从0开始
for (int i = 0; i < tb.numRows(); i++) {
TableRow tr = tb.getRow(i);
//迭代列,默认从0开始
for (int j = 0; j < tr.numCells(); j++) {
TableCell td = tr.getCell(j);//取得单元格
//取得单元格的内容
for(int k=0;k<td.numParagraphs();k++){
Paragraph para =td.getParagraph(k);
String s = para.text();
System.out.println(s);
}
}
}
}
}catch(Exception e){
e.printStackTrace();
}
}
/**
* 替换word中的内容
* @param filename
* @param oldStr
* @param newStr
*/
public static void replaceWord(String filename,String oldStr,String newStr){
FileInputStream in;
try {
in = new FileInputStream(filename);
HWPFDocument doc = new HWPFDocument(in);
Range range = doc.getRange();
range.replaceText(oldStr, newStr);
String text = range.text();
writeWord(text,filename);
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* 读取word文档,并写入另一文档
*
*/
public static void copyWord(){
FileInputStream in;
try {
in = new FileInputStream("D:\\wordTable.docx");
POIFSFileSystem fs = new POIFSFileSystem(in);
HWPFDocument doc = new HWPFDocument(fs);
Range range = doc.getRange();
String text = range.text();
System.out.println("old-----"+text);
FileOutputStream out = new FileOutputStream("D:\\word2.doc");
fs.writeFilesystem(out);
out.flush();
out.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* 建目录
* @param filename
* @return
*/
public static boolean mkDir(String filename){
int last = filename.lastIndexOf("\\");
String dirPath = filename.substring(0, last);
File dir = new File(dirPath);
if(!dir.exists()){//不存在
return dir.mkdirs();
}
return true;
}
public static void main(String[] args) throws Exception {
String file1 = "D:\\word.doc";
String file2 = "D:\\wordTable.docx";
//模拟数据
String content = "这是我的导出word文档内容。The quick brown fox";
String[] title = new String[]{"编号","姓名","年龄"};
List<Object[]> list = new ArrayList<Object[]>();
for(int i=0;i<5;i++){
Object[] obj = new Object[3];
obj[0] = "A" + i;
obj[1] = "Zhang" + i;
obj[2] = "1" + i;
list.add(obj);
}
createWord(file1, content, title, list);
// copyWord();
// writeWord(content ,file1);
}
}
分享到:
相关推荐
Jupyter-Notebook
Jupyter-Notebook
高效甘特图模板下载-精心整理.zip
lstm Summary Framework: z = U>x, x u Uz Criteria for choosing U: • PCA: maximize projected variance • CCA: maximize projected correlation • FDA: maximize projected intraclass variance
OpenGL调试工具,适合图形开发者,包括视频开发,播放器开始以及游戏开发者。
全国行政区划shp最新图.zip
全国研究生招生与在校数据+国家线-最新.zip
Jupyter-Notebook
直播电商交流平台 SSM毕业设计 附带论文 启动教程:https://www.bilibili.com/video/BV1GK1iYyE2B
《林黛玉进贾府》课本剧剧本
2000-2020年沪深A股上市公司融资约束程度SA指数-最新数据发布.zip
PPT模版资料,PPT模版资料
CPA注会考试最新教材资料-最新发布.zip
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。
内容概要:本文提供了一个完整的职工管理系统的C++源代码。通过面向对象的编程方法,实现了包括创建新职工、查询、增加、修改、删除、排序、统计以及存储和恢复职工数据在内的多个基本操作功能。该系统支持不同的用户角色(如管理员与老板),并通过菜单驱动方式让用户方便地进行相关操作。此外,还包括了错误检测机制,确保操作过程中的异常得到及时处理。 适合人群:有一定C++语言基础,特别是面向对象编程经验的程序员;企业管理人员和技术开发人员。 使用场景及目标:适用于中小型企业内部的人力资源管理部门或IT部门,用于维护员工基本信息数据库,提高工作效率。通过本项目的学习可以加深对链表、类和对象的理解。 阅读建议:建议先熟悉C++的基本语法和面向对象概念,再深入学习代码的具体实现细节。对于关键函数,比如exchange、creatilist等,应当重点关注并动手实践以加强理解。
Jupyter-Notebook
考研公共课历年真题集-最新发布.zip
Huawei-HKUST Joint Workshop on Theory for Future Wireless 15-16 September 2022 华为-香港科技大学未来无线理论联合研讨会 Speaker:Jingwen Tong
演出人员与观众疫情信息管理系统 SSM毕业设计 附带论文 启动教程:https://www.bilibili.com/video/BV1GK1iYyE2B
《林黛玉进贾府》课本剧剧本.pdf