×

apache poi

apache poi(java apache poi 框架向excel中插入对象)

admin admin 发表于2023-02-20 02:19:01 浏览55 评论0

抢沙发发表评论

本文目录

java apache poi 框架向excel中插入对象


Java 中,调用 Apache 的 POI 操作 Excel,往 Excel 中插入一张图片。
举例如下:
//create a new workbook
Workbook wb = new XSSFWorkbook(); //or new HSSFWorkbook();
//add picture data to this workbook.
// 打开图片
InputStream is = new FileInputStream(“image1.jpeg“);
byte bytes = IOUtils.toByteArray(is);
// 增加图片到 Workbook
int pictureIdx = wb.addPicture(bytes, Workbook.PICTURE_TYPE_JPEG);
is.close();
CreationHelper helper = wb.getCreationHelper();
//create sheet
Sheet sheet = wb.createSheet();
// Create the drawing patriarch. This is the top level container for all shapes.
Drawing drawing = sheet.createDrawingPatriarch();
//add a picture shape
ClientAnchor anchor = helper.createClientAnchor();
//set top-left corner of the picture,
//subsequent call of Picture#resize() will operate relative to it
// 设置图片位置
anchor.setCol1(3);
anchor.setRow1(2);
Picture pict = drawing.createPicture(anchor, pictureIdx);
//auto-size picture relative to its top-left corner
pict.resize();
//save workbook
String file = “picture.xls“;
if(wb instanceof XSSFWorkbook) file += “x“;
// 输出文件
FileOutputStream fileOut = new FileOutputStream(file);
wb.write(fileOut);
fileOut.close();

apache poi获取ppt全部内容和细化读取的区别


有时候我们需要从Excel文件中读取数据,或者我们为了商务或者财政的目的生成Excel格式的报表.Java没有对操作Excel文件提供内在的支持,所以我们需要寻找开源的APIs.当我开始寻找操作Excel的APIs时候,大部分人建议使用JExcel或者Apache POI.
在深入研究后,我发现由于以下主要原因Apache POI是正确的选择.还有些关于高级特性的原因,但是我们不深入太多细节.
1)Apache基金的支持.
2)JExcel不支持xlsx格式而POI既支持xls格式又支持xlsx格式.
3)Apache POI是基于流的处理,因此更适合大文件和要求更少的内存.
Apache POI对处理Excel文件提供了强大的支持,并且能处理xls和xlsx格式的电子表格.
关于Apache POI一些重要的地方:
1)Apache POI包含适合Excel97-2007(.xls文件)的HSSF实现.
2)Apache POI XSSF实现用来处理Excel2007文件(.xlsx).
3)Apache POI HSSF和XSSF提供了读/写/修改Excel表格的机制.
4)Apache POI提供了XSSF的一个扩展SXSSF用来处理非常大的Excel工作单元.SXSSF API需要更少的内存,因此当处理非常大的电子表格同时堆内存又有限时,很合适使用.
5)有两种模式可供选择--事件模式和用户模式.事件模式要求更少的内存,因为用tokens来读取Excel并处理.用户模式更加面向对象并且容易使用,因此在我们的示例中使用用户 模式.
6)Apache POI为额外的Excel特性提供了强大支持,例如处理公式,创建单元格样式--颜色,边框,字体,头部,脚部,数据验证,图像,超链接等.

Apache POI的Maven依赖
[java] view plaincopy
《span style=“font-size:14px;“》《dependency》
《groupId》org.apache.poi《/groupId》
《artifactId》poi《/artifactId》
《version》3.10-FINAL《/version》
《/dependency》
《dependency》
《groupId》org.apache.poi《/groupId》
《artifactId》poi-ooxml《/artifactId》
《version》3.10-FINAL《/version》
《/dependency》《/span》
Apache POI的当前版本是3.10-FINAL.如果你使用单独的java应用,添加jars根据下面的图片.
读取Excel文件
假设我们有一个叫Sample.xlsx的Excel文件,里面有两个sheet并且下面图片中的数据.我们想要读取这个Excel文件并且创建Countries list.sheet1有些额外的数据,当我们解析时会忽略它.
我们的国家(Country)java bean如下:
Country.java
[java] view plaincopy
package com.journaldev.excel.read;

public class Country {

private String name;
private String shortCode;

public Country(String n, String c){
this.name=n;
this.shortCode=c;
}

public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getShortCode() {
return shortCode;
}
public void setShortCode(String shortCode) {
this.shortCode = shortCode;
}

@Override
public String toString(){
return name + “::“ + shortCode;
}

}
读取Excel文件并创建Countries list代码如下:
ReadExcelFileToList.java
[java] view plaincopy
package com.journaldev.excel.read;

import java.io.FileInputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

public class ReadExcelFileToList {

public static List《Country》 readExcelData(String fileName) {
List《Country》 countriesList = new ArrayList《Country》();

try {
//Create the input stream from the xlsx/xls file
FileInputStream fis = new FileInputStream(fileName);

//Create Workbook instance for xlsx/xls file input stream
Workbook workbook = null;
if(fileName.toLowerCase().endsWith(“xlsx“)){
workbook = new XSSFWorkbook(fis);
}else if(fileName.toLowerCase().endsWith(“xls“)){
workbook = new HSSFWorkbook(fis);
}

//Get the number of sheets in the xlsx file
int numberOfSheets = workbook.getNumberOfSheets();

//loop through each of the sheets
for(int i=0; i 《 numberOfSheets; i++){

//Get the nth sheet from the workbook
Sheet sheet = workbook.getSheetAt(i);

//every sheet has rows, iterate over them
Iterator《Row》 rowIterator = sheet.iterator();
while (rowIterator.hasNext())
{
String name = ““;
String shortCode = ““;

//Get the row object
Row row = rowIterator.next();

//Every row has columns, get the column iterator and iterate over them
Iterator《Cell》 cellIterator = row.cellIterator();

while (cellIterator.hasNext())
{
//Get the Cell object
Cell cell = cellIterator.next();

//check the cell type and process accordingly
switch(cell.getCellType()){
case Cell.CELL_TYPE_STRING:
if(shortCode.equalsIgnoreCase(““)){
shortCode = cell.getStringCellValue().trim();
}else if(name.equalsIgnoreCase(““)){
//2nd column
name = cell.getStringCellValue().trim();
}else{
//random data, leave it
System.out.println(“Random data::“+cell.getStringCellValue());
}
break;
case Cell.CELL_TYPE_NUMERIC:
System.out.println(“Random data::“+cell.getNumericCellValue());
}
} //end of cell iterator
Country c = new Country(name, shortCode);
countriesList.add(c);
} //end of rows iterator
} //end of sheets for loop

//close file input stream
fis.close();

} catch (IOException e) {
e.printStackTrace();
}

return countriesList;
}

public static void main(String args){
List《Country》 list = readExcelData(“Sample.xlsx“);
System.out.println(“Country List\n“+list);
}

}
这个程序很容易明白,主要步骤如下:
1)根据文件类型(.xls与.xlsx)创建Workbook实例,xlsx用XSSFWorkbook,xls用HSSFWorkbook.我们可以基于文件名字使用工 厂模式创建一个包装类来创建Workbook实例.
2)使用Workbook getNumberOfSheets()来获取sheet的数量,然后循环解析每一个sheet.使用getSheetAt(int i)方法获取 Sheet实例.
3)获取Row和Cell迭代器来获取每一个Cell对象.Apache POI在这里使用了迭代器模式.
4)使用switch-case根据Cell的类型来处理它.

apache poi什么用


在 GrapeCity Documents出现以前,服务端文档组件向来以Apache POI为代表,作为一款由Java编写的开源API库,Apache POI 主要应用于对Microsoft Office文档进行读、写,以及创建和维护。

但正如POI所定义的那样:作为“Poor Obfuscation Implementation”首字母的缩写,Apache POI仅提供“简单的模糊实现”,其在创建复杂逻辑的大型文档时,经常会捉襟见肘。

如果想通过简单的代码逻辑,快速创建、加载、编辑、导入/导出大型文档(Excel、Word、PDF),并将其部署到云端时,又该如何实现?

而这些需求,恰恰是GrapeCity Documents 可以满足的。

GrapeCity Documents 是一款快速且高效的服务端文档组件包,可在 Windows、Mac、Linux 上完美运行,同时适用于 .NET和 Java 平台,可在不依赖 Microsoft Office 和 Acrobat 组件的情况下,提供快速生成、加载、编辑和保存 Excel、PDF、Word文档的功能。

GrapeCity Documents 由四种针对不同文档和开发框架的组件构成:

·       适用于所有 .NET 平台的 Excel 文档 API —— GcExcel(.NET)

·       适用于所有 Java 平台的 Excel 文档 API —— GcExcel(Java)

·       适用于所有 .NET 平台的 PDF 文档 API —— GcPDF

·       适用于所有 .NET 平台的 Word 文档 API —— GcWord


apache poi 用了jna吗或者用了windows native吗


使用JNI调用.dll/.so共享类库是非常非常麻烦和痛苦的。 如果有一个现有的.dll/.so文件,如果使用JNI技术调用,我们首先需要另外使用C语言写一个.dll/.so共享库,使用SUN规定的数据结构替代C语言的数据结构,调用已有的 dll/so中公布的函数。然后再在Java中载入这个适配器dll/so,再编写Java native函数作为dll中函数的代理。

apache poi 为什么意为“可怜的模糊实现


Apache POI 是用Java编写的免费开源的跨平台的 Java API,Apache POI提供API给Java程式对Microsoft Office格式档案读和写的功能。POI为“Poor Obfuscation Implementation”的首字母缩写,意为“可怜的模糊实现”。
Apache POI 是创建和维护操作各种符合Office Open XML(OOXML)标准和微软的OLE 2复合文档格式(OLE2)的Java API。用它可以使用Java读取和创建,修改MS Excel文件.而且,还可以使用Java读取和创建MS Word和MSPowerPoint文件。Apache POI 提供Java操作Excel解决方案(适用于Excel97-2008)。
HSSF 是Horrible SpreadSheet Format的缩写,也即“讨厌的电子表格格式”。 也许HSSF的名字有点滑稽,就本质而言它是一个非常严肃、正规的API。通过HSSF,你可以用纯Java代码来读取、写入、修改Excel文件。
HSSF 为读取操作提供了两类API:usermodel和eventusermodel,即“用户模型”和“事件-用户模型”。前者很好理解,后者比较抽象,但操作效率要高得多。

下载了个apache poi-3.6,怎样使用啊


这个。。。 涉及的内容太多,打字说清楚的话可以够一个小手册了。
把poi-3.6-20091214.jar这个jar包解压缩拿出来,在eclipse的工程文件里作为外部jar包添加在jar包列表中,然后就可以创建一个类执行了。

Apache的poi到底是一个怎样的东西


在 GrapeCity Documents出现以前,服务端文档组件向来以Apache POI为代表,作为一款由Java编写的开源API库,Apache POI 主要应用于对Microsoft Office文档进行读、写,以及创建和维护。

但正如POI所定义的那样:作为“Poor Obfuscation Implementation”首字母的缩写,Apache POI仅提供“简单的模糊实现”,其在创建复杂逻辑的大型文档时,经常会捉襟见肘。

如果想通过简单的代码逻辑,快速创建、加载、编辑、导入/导出大型文档(Excel、Word、PDF),并将其部署到云端时,又该如何实现?

而这些需求,恰恰是GrapeCity Documents 可以满足的。

GrapeCity Documents 是一款快速且高效的服务端文档组件包,可在 Windows、Mac、Linux 上完美运行,同时适用于 .NET和 Java 平台,可在不依赖 Microsoft Office 和 Acrobat 组件的情况下,提供快速生成、加载、编辑和保存 Excel、PDF、Word文档的功能。

GrapeCity Documents 由四种针对不同文档和开发框架的组件构成:

·       适用于所有 .NET 平台的 Excel 文档 API —— GcExcel(.NET)

·       适用于所有 Java 平台的 Excel 文档 API —— GcExcel(Java)

·       适用于所有 .NET 平台的 PDF 文档 API —— GcPDF

·       适用于所有 .NET 平台的 Word 文档 API —— GcWord

 

下面,我们将以其中的GcExcel 为例,详细对比它与 Apache POI 的功能及性能优劣。

功能对比:GcExcel VS Apache POI

1.    公式数量

GcExcel支持452种Excel公式。

Apache POI中,支持的公式数量很少(虽然Apache POI网站罗列了280多种可评估的公式,但在API中仅显示为157种)。

2.    是否支持导出PDF

GcExcel不但支持导出PDF格式,还可控制页面设置选项。

Apache POI不支持导出PDF。

3.    条件格式

GcExcel支持多种条件格式,如自定义图标集、判断是否高于平均值(AboveAverage)、发生日期判断、Top 10和重复项判断,且这些条件格式的设置规则与VSTO保持一致。

但在Apache POI中,使用高级API来增加条件格式判断会受限。因此,只能使用标记为内部用途的低级类来处理Top10、高于平均值(AboveAverage)等格式化选项。

4.    图表类型

GcExcel的图表界面与VSTO一致,支持约53种图表类型。

Apache POI对图表的支持非常有限,仅支持Line、Bar、Column、Scatter和Radar图表类型。

5.    迷你图

GcExcel完全支持添加和配置迷你图(Sparklines)。

Apache POI目前不支持Sparklines。

6.    剪切、复制、粘贴形状

GcExcel支持剪切、复制、粘贴形状,Apache POI不支持。

7.    过滤器数据类型

GcExcel广泛支持文本、数字、日期、颜色和图标等过滤器。

Apache POI仅支持基本的AutoFilter,需要使用低级类来实现应用过滤或创建任何其他高级过滤器。

8.    排序

GcExcel支持所有类型的行排序、列排序、自定义排序、颜色和图标排序。

Apache POI没有内置的排序功能。但是,用户可以使用shiftRows()/ ShiftColumns()并以编程方式对数据进行排序。

9.    切片器

GcExcel支持带有数据透视表的切片器,而Apache POI则不支持。

10. 导出CSV格式

GcExcel支持导出为CSV格式。

Apache POI没有提供内置的导出CSV选项。但是,可以使用编程的方式创建相应的CSV / HTML文件。

11. 渐变填充

GcExcel支持渐变填充,而Apache POI不支持。

12. 单元格中获取/设置值

在对单个单元格执行获取/设置值的情况下,GcExcel比Apache POI表现的更好。

13. 示例与帮助文档

使用Apache POI,许多功能需要访问和了解底层API才能实现, 但Apache POI提供的示例和文档数量十分有限,对于开发人员来说学习成本较大。

而GcExcel作为独立于平台的API 组件,具备高性能、低内存消耗的特点,并且与Excel对象模型严格兼容。GcExcel更加易于使用且功能全面,通过其提供的在线演示示例和帮助文档,开发人员可以快速上手,迅速掌握产品使用技巧。


如何用Apache POI读取Excel


  首先POI是开源组织Apache出品的一个开源jar包,提供了方便解析Excel的API,我们可以非常方便的使用它来读取Excel。这里介绍3.5Final版本。

  所需用到的jar包如下:

  说到Excel,有2003和2007,格式是不一样的,用POI解析的方法也就不一样,Excel2003主要是使用org.apache.poi.hssf.usermodel包中的类来解析,而Excel2007就是使用org.apache.poi.xssf.usermodel来解析。

  解析Excel2003源码

说到Excel,有2003和2007,格式是不一样的,用POI解析的方法也就不一样,Excel2003主要是使用org.apache.poi.hssf.usermodel包中的类来解析,而Excel2007就是使用org.apache.poi.xssf.usermodel来解析。

解析Excel2003源码

StringBuffer content = new StringBuffer();
  HSSFWorkbook workbook = new HSSFWorkbook(is); // 创建对Excel工作簿文件的引用

  for (int numSheets = 0; numSheets 《 workbook.getNumberOfSheets(); numSheets++) {
   if (null != workbook.getSheetAt(numSheets)) {
    HSSFSheet aSheet = workbook.getSheetAt(numSheets); // 获得一个sheet

    for (int rowNumOfSheet = 0; rowNumOfSheet 《= aSheet.getLastRowNum(); rowNumOfSheet++) {
     if (null != aSheet.getRow(rowNumOfSheet)) {
      HSSFRow aRow = aSheet.getRow(rowNumOfSheet); // 获得一行

      for (int cellNumOfRow = 0; cellNumOfRow 《= aRow.getLastCellNum(); cellNumOfRow++) {
       if (null != aRow.getCell(cellNumOfRow)) {
        HSSFCell aCell = aRow.getCell(cellNumOfRow); // 获得列值
        
        if (aCell.getCellType() == HSSFCell.CELL_TYPE_NUMERIC) {
         content.append(aCell.getNumericCellValue() + “\t“);
        } else if (aCell.getCellType() == HSSFCell.CELL_TYPE_BOOLEAN) {
         content.append(aCell.getBooleanCellValue() + “\t“);
        } else if (aCell.getCellType() == HSSFCell.CELL_TYPE_STRING) {
         content.append(aCell.getStringCellValue() + “\t“);
        } else if (aCell.getCellType() == HSSFCell.CELL_TYPE_FORMULA){
         content.append(aCell.getCellFormula() + “\t“);
        } else {
         continue;
        }
       }
       if(cellNumOfRow == aRow.getLastCellNum()) {
        content.append(“\n“);
       }
      }
     }
    }
   }
  }

  return content.toString().trim();

 

解析Excel2007和2003基本一样,只是将HSSFSheet,HSSFCell等都改成XSSFSheet,XSSFCell即可。

另外要提醒大家的是Excel的样式都是基于一个单元格的,所以用HSSFRow.getRowStyle()拿样式会出问题的,不一定会拿到你想要的样式。处理合并单元格是POI的一个难点,只能通过判断当前单元格是否在合并单元格之中,如果是,那此单元格的值便是这个合并单元格的首位置单元格的值,只有通过这样才能来处理合并单元格。

处理合并单元格的代码:

 public static boolean isMergedRegion(HSSFSheet sheet, HSSFCell cell) {
  //得到一个sheet中有多少个合并单元格
  int sheetmergerCount = sheet.getNumMergedRegions();
  for(int i = 0; i 《 sheetmergerCount; i++) {
   //得出具体的合并单元格
   CellRangeAddress ca = sheet.getMergedRegion(i);
   //得到合并单元格的起始行, 结束行, 起始列, 结束列
   int firstC = ca.getFirstColumn();
   int lastC = ca.getLastColumn();
   int firstR = ca.getFirstRow();
   int lastR = ca.getLastRow();
   //判断该单元格是否在合并单元格范围之内, 如果是, 则返回 true
   if(cell.getColumnIndex() 《= lastC && cell.getColumnIndex() 》= firstC) {
    if(cell.getRowIndex() 《= lastR && cell.getRowIndex() 》= firstR) {
     return true;
    }
   }
  }
  return false;
 }

 

 public static String getMergedRegionValue(HSSFSheet sheet, HSSFCell cell) {
  //获得一个 sheet 中合并单元格的数量
  int sheetmergerCount = sheet.getNumMergedRegions();
  //便利合并单元格
  for(int i = 0; i 《 sheetmergerCount; i++) {
   //获得合并单元格
   CellRangeAddress ca = sheet.getMergedRegion(i);
   //获得合并单元格的起始行, 结束行, 起始列, 结束列
   int firstC = ca.getFirstColumn();
   int lastC = ca.getLastColumn();
   int firstR = ca.getFirstRow();
   int lastR = ca.getLastRow();
   //判断该单元格是否是在合并单元格中, 如果是, 则返回所在合并单元格的首单元格的值
   if(cell.getColumnIndex() 《= lastC && cell.getColumnIndex() 》= firstC) {
    if(cell.getRowIndex() 《= lastR && cell.getRowIndex() 》= firstR) {
     HSSFRow fRow = sheet.getRow(firstR);
     HSSFCell fCell = fRow.getCell(firstC);
     //除了合并单元格首单元格的值, 其余的用(*)来区分
     if (fCell.getCellType() == HSSFCell.CELL_TYPE_NUMERIC && hasBorder(cell)) {
      return String.valueOf(fCell.getNumericCellValue());
     } else if (fCell.getCellType() == HSSFCell.CELL_TYPE_BOOLEAN && hasBorder(cell)) {
      return String.valueOf(fCell.getBooleanCellValue());
     } else if (fCell.getCellType() == HSSFCell.CELL_TYPE_STRING && hasBorder(cell)) {
      return fCell.getStringCellValue();
     } else if (fCell.getCellType() == HSSFCell.CELL_TYPE_FORMULA && hasBorder(cell)){
      return String.valueOf(fCell.getCellFormula());
     }
    }
   }
  }
  return ““;
 }


如何用Apache POI操作Excel文件


package com.soukenan.util.filter;

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;

import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.ss.usermodel.WorkbookFactory;

public class POITest {
//使用POI创建excel工作簿
public static void createWorkBook() throws IOException {
//创建excel工作簿
Workbook wb = new HSSFWorkbook();
//创建第一个sheet(页),命名为 new sheet
Sheet sheet = wb.createSheet(“new sheet“);
//Row 行
//Cell 方格
// Row 和 Cell 都是从0开始计数的

// 创建一行,在页sheet上
Row row = sheet.createRow((short) 0);
// 在row行上创建一个方格
Cell cell = row.createCell(0);
//设置方格的显示
cell.setCellValue(1);

// Or do it on one line.
row.createCell(1).setCellValue(1.2);
row.createCell(2).setCellValue(“This is a string 速度反馈链接“);
row.createCell(3).setCellValue(true);

//创建一个文件 命名为workbook.xls
FileOutputStream fileOut = new FileOutputStream(“workbook.xls“);
// 把上面创建的工作簿输出到文件中
wb.write(fileOut);
//关闭输出流
fileOut.close();
}

//使用POI读入excel工作簿文件
public static void readWorkBook() throws Exception {
// poi读取excel
//创建要读入的文件的输入流
InputStream inp = new FileInputStream(“workbook.xls“);

//根据上述创建的输入流 创建工作簿对象
Workbook wb = WorkbookFactory.create(inp);
//得到第一页 sheet
//页Sheet是从0开始索引的
Sheet sheet = wb.getSheetAt(0);
//利用foreach循环 遍历sheet中的所有行
for (Row row : sheet) {
//遍历row中的所有方格
for (Cell cell : row) {
//输出方格中的内容,以空格间隔
System.out.print(cell.toString() + “ “);
}
//每一个行输出之后换行
System.out.println();
}
//关闭输入流
inp.close();
}

public static void main(String args) throws Exception {
// POITest.createWorkBook();
POITest.readWorkBook();
}
}

如何使用apache poi将word转化为html


Java可以使用这个开源框架,对word进行读取合并等操作,Apache POI是一个开源的利用Java读写Excel、WORD等微软OLE2组件文档的项目。最新的3.5版本有很多改进,加入了对采用OOXML格式的Office 2007支持,如xlsx、docx、pptx文档。 示例如下:import org.apache.poi.POITextExtractor;
import org.apache.poi.hwpf.extractor.WordExtractor;
//得到.doc文件提取器
org.apache.poi.hwpf.extractor.WordExtractor doc = new WordExtractor(new FileInputStream(filePath));
//提取.doc正文文本
String text = doc.getText();
//提取.doc批注
String comments = doc. getCommentsText();
2007
import org.apache.poi.POITextExtractor;
import org.apache.poi.xwpf.extractor.XWPFWordExtractor;
import org.apache.poi.xwpf.usermodel.XWPFComment;
import org.apache.poi.xwpf.usermodel.XWPFDocument;
//得到.docx文件提取器
org.apache.poi.xwpf.extractor.XWPFWordExtractor docx = new XWPFWordExtractor(POIXMLDocument.openPackage(filePath));
//提取.docx正文文本
String text = docx.getText();
//提取.docx批注
org.apache.poi.xwpf.usermodel.XWPFComment comments = docx.getDocument()).getComments();
for(XWPFComment comment:comments){
comment.getId();//提取批注Id
comment.getAuthor();//提取批注修改人
comment.getText();//提取批注内容
}