用POI在word07模板文件中创建表格,修改内容等操作
2013-07-09 15:07
561 查看
最近做项目时,需要利用POI技术,在word文档中写表格,但是网上几乎搜索不到相关资料,经过2天的研究,终于实现了功能。
用到的POI对象是:XWPFDocument
读取模板文件获取所有的table:
OPCPackage opcPackage = POIXMLDocument.openPackage(wordFilePath);
XWPFDocument doc = new XWPFDocument(opcPackage);
List<XWPFTable> list = doc.getTables();
对表格增加新的一行,并设置数据:
XWPFTableRow crtRow = tb.createRow();
List<XWPFTableCell> cells = crtRow.getTableCells();
for (int j = 0; j < cells.size(); j++) {
cells.get(j).removeParagraph(0);
cells.get(j).setText(map.get(j));
// cells.get(j).setVerticalAlignment(XWPFVertAlign.BOTH);
LOGGER.debug("insert into table value:" + map.get(j));
}
如需删除行:
tb.getCTTbl().removeTr(row);
// tb.removeRow(row); API删除行有点问题,我就直接用源码的一部分(上面一句话)即可。
文字的替换原则 :先删后加
Iterator<XWPFParagraph> paragraphs = document.getParagraphsIterator();
while (paragraphs.hasNext()) {
XWPFParagraph paragraph = (XWPFParagraph) paragraphs.next();
Set<Entry<String, String>> set = map.entrySet();
for (Map.Entry<String, String> key : set) {
String text = "";
if (paragraph.getParagraphText().indexOf(key.getKey()) != -1) {
PositionInParagraph positionInParagraph = new PositionInParagraph();
TextSegement textSegement = SearchText.searchTextOfParagraph(paragraph.getCTP(), key.getKey(),
positionInParagraph);
text = paragraph.getText(textSegement).replace(key.getKey(), key.getValue());
List<XWPFRun> paragraphRuns = paragraph.getRuns();
for (int i = textSegement.getEndRun(); i > textSegement.getBeginRun(); i--) {
paragraph.removeRun(i);
}
XWPFRun paragraphRun = paragraphRuns.get(textSegement.getBeginRun());
CTR ctr = paragraphRun.getCTR();
for (int i = ctr.sizeOfTArray() - 1; i >= 0; i--) {
ctr.removeT(i);
}
paragraphRun.setText(text);
}
}
}
我修改了API搜索文本方法:searchText 为 SearchText.searchTextOfParagraph(CTP paragraph, String searched, PositionInParagraph startPos)
paragraph.getRList()改为paragraph.getRArray()
用到的POI对象是:XWPFDocument
读取模板文件获取所有的table:
OPCPackage opcPackage = POIXMLDocument.openPackage(wordFilePath);
XWPFDocument doc = new XWPFDocument(opcPackage);
List<XWPFTable> list = doc.getTables();
对表格增加新的一行,并设置数据:
XWPFTableRow crtRow = tb.createRow();
List<XWPFTableCell> cells = crtRow.getTableCells();
for (int j = 0; j < cells.size(); j++) {
cells.get(j).removeParagraph(0);
cells.get(j).setText(map.get(j));
// cells.get(j).setVerticalAlignment(XWPFVertAlign.BOTH);
LOGGER.debug("insert into table value:" + map.get(j));
}
如需删除行:
tb.getCTTbl().removeTr(row);
// tb.removeRow(row); API删除行有点问题,我就直接用源码的一部分(上面一句话)即可。
文字的替换原则 :先删后加
Iterator<XWPFParagraph> paragraphs = document.getParagraphsIterator();
while (paragraphs.hasNext()) {
XWPFParagraph paragraph = (XWPFParagraph) paragraphs.next();
Set<Entry<String, String>> set = map.entrySet();
for (Map.Entry<String, String> key : set) {
String text = "";
if (paragraph.getParagraphText().indexOf(key.getKey()) != -1) {
PositionInParagraph positionInParagraph = new PositionInParagraph();
TextSegement textSegement = SearchText.searchTextOfParagraph(paragraph.getCTP(), key.getKey(),
positionInParagraph);
text = paragraph.getText(textSegement).replace(key.getKey(), key.getValue());
List<XWPFRun> paragraphRuns = paragraph.getRuns();
for (int i = textSegement.getEndRun(); i > textSegement.getBeginRun(); i--) {
paragraph.removeRun(i);
}
XWPFRun paragraphRun = paragraphRuns.get(textSegement.getBeginRun());
CTR ctr = paragraphRun.getCTR();
for (int i = ctr.sizeOfTArray() - 1; i >= 0; i--) {
ctr.removeT(i);
}
paragraphRun.setText(text);
}
}
}
我修改了API搜索文本方法:searchText 为 SearchText.searchTextOfParagraph(CTP paragraph, String searched, PositionInParagraph startPos)
paragraph.getRList()改为paragraph.getRArray()
相关文章推荐
- poi操作excel导出是否修改模板文件内容的问题
- 内容文件Java创建TXT文件并进行读、写、修改操作
- python文件夹遍历,文件操作,获取文件修改创建时间
- 关于os模块中的文件夹遍历,文件操作,文件的创建和修改时间的用法
- java poi操作word模版文件生成表单和修改
- python文件夹遍历,文件操作,获取文件修改创建时间<转>
- PHP目录与文件操作技巧总结(创建,删除,遍历,读写,修改等)
- POI根据EXCEL模板,修改内容导出新EXCEL (只支持HSSF)
- C# 文件操作(全部) 追加、拷贝、删除、移动文件、创建目录 修改文件名、文件夹名
- Linux下对文件创建、修改、访问时间的一些操作
- C# 文件操作(全部) 追加、拷贝、删除、移动文件、创建目录 修改文件名、文件夹名
- poi读取模板并修改模板内容
- Android 关于文件及文件夹的创建 、删除、重命名、复制拷贝、添加内容、修改内容、读取内容
- C# 文件操作(全部) 追加、拷贝、删除、移动文件、创建目录 修改文件名、文件夹名
- poi操作ppt创建表格
- 使用POI操作Excel修改模板(批量替换excel中的数据并判断excel版本)
- (转)Java创建txt文件并进行读、写、修改操作
- 使用终端操作数据库文件,创建 删除 查找内容 插入内容
- fstream提供了三个类,用来实现c++对文件的操作。(文件的创建、读、写)。 ifstream -- 从已有的文件读 ofstream -- 向文件写内容 fstream - 打开文件供读写
- 2016/5/6 thinkphp ①框架 ② 框架项目部署 ③MVC模式 ④控制器访问及路由解析 ⑤开发和生产模式 ⑥控制器和对应方法创建 ⑦视图模板文件创建 ⑧url地址大小写设置 ⑨空操作空控制器 ⑩项目分组