`
顽石OK07
  • 浏览: 83936 次
  • 性别: Icon_minigender_2
  • 来自: 上海
社区版块
存档分类
最新评论

POI学习笔记(二) 转载

阅读更多

7.  设置单元格的边框

 

Java代码 复制代码
  1. public void createBorder() throws Exception {   
  2.         Workbook wb = new HSSFWorkbook();   
  3.         Sheet sheet = wb.createSheet("new sheet");   
  4.   
  5.         // Create a row and put some cells in it. Rows are 0 based.   
  6.         Row row = sheet.createRow(1);   
  7.   
  8.         // Create a cell and put a value in it.   
  9.         Cell cell = row.createCell(1);   
  10.         cell.setCellValue(4);   
  11.   
  12.         // Style the cell with borders all around.   
  13.         CellStyle style = wb.createCellStyle();   
  14.         style.setBorderBottom(CellStyle.BORDER_THIN);   
  15.         style.setBottomBorderColor(IndexedColors.BLACK.getIndex());   
  16.         style.setBorderLeft(CellStyle.BORDER_THIN);   
  17.         style.setLeftBorderColor(IndexedColors.GREEN.getIndex());   
  18.         style.setBorderRight(CellStyle.BORDER_THIN);   
  19.         style.setRightBorderColor(IndexedColors.BLUE.getIndex());   
  20.         style.setBorderTop(CellStyle.BORDER_MEDIUM_DASHED);   
  21.         style.setTopBorderColor(IndexedColors.BLACK.getIndex());   
  22.         cell.setCellStyle(style);   
  23.   
  24.         // Write the output to a file   
  25.         FileOutputStream fileOut = new FileOutputStream("workbook.xls");   
  26.         wb.write(fileOut);   
  27.         fileOut.close();   
  28.   
  29.     }  
Java代码 复制代码
  1. <SPAN style="FONT-SIZE: medium">public void createBorder() throws Exception {   
  2.         Workbook wb = new HSSFWorkbook();   
  3.         Sheet sheet = wb.createSheet("new sheet");   
  4.   
  5.         // Create a row and put some cells in it. Rows are 0 based.   
  6.         Row row = sheet.createRow(1);   
  7.   
  8.         // Create a cell and put a value in it.   
  9.         Cell cell = row.createCell(1);   
  10.         cell.setCellValue(4);   
  11.   
  12.         // Style the cell with borders all around.   
  13.         CellStyle style = wb.createCellStyle();   
  14.         style.setBorderBottom(CellStyle.BORDER_THIN);   
  15.         style.setBottomBorderColor(IndexedColors.BLACK.getIndex());   
  16.         style.setBorderLeft(CellStyle.BORDER_THIN);   
  17.         style.setLeftBorderColor(IndexedColors.GREEN.getIndex());   
  18.         style.setBorderRight(CellStyle.BORDER_THIN);   
  19.         style.setRightBorderColor(IndexedColors.BLUE.getIndex());   
  20.         style.setBorderTop(CellStyle.BORDER_MEDIUM_DASHED);   
  21.         style.setTopBorderColor(IndexedColors.BLACK.getIndex());   
  22.         cell.setCellStyle(style);   
  23.   
  24.         // Write the output to a file   
  25.         FileOutputStream fileOut = new FileOutputStream("workbook.xls");   
  26.         wb.write(fileOut);   
  27.         fileOut.close();   
  28.   
  29.     }</SPAN>  
public void createBorder() throws Exception {
		Workbook wb = new HSSFWorkbook();
		Sheet sheet = wb.createSheet("new sheet");

		// Create a row and put some cells in it. Rows are 0 based.
		Row row = sheet.createRow(1);

		// Create a cell and put a value in it.
		Cell cell = row.createCell(1);
		cell.setCellValue(4);

		// Style the cell with borders all around.
		CellStyle style = wb.createCellStyle();
		style.setBorderBottom(CellStyle.BORDER_THIN);
		style.setBottomBorderColor(IndexedColors.BLACK.getIndex());
		style.setBorderLeft(CellStyle.BORDER_THIN);
		style.setLeftBorderColor(IndexedColors.GREEN.getIndex());
		style.setBorderRight(CellStyle.BORDER_THIN);
		style.setRightBorderColor(IndexedColors.BLUE.getIndex());
		style.setBorderTop(CellStyle.BORDER_MEDIUM_DASHED);
		style.setTopBorderColor(IndexedColors.BLACK.getIndex());
		cell.setCellStyle(style);

		// Write the output to a file
		FileOutputStream fileOut = new FileOutputStream("workbook.xls");
		wb.write(fileOut);
		fileOut.close();

	}

 

8. 迭代行和单元格

 

    有时需要迭代一个页中的所有行,或者一个行中所有的单元格。一个简单的方法是循环。

    幸运的是,poi知道我们所需。页可以通过sheet.rowIterator()迭代出所有的行,行可以通过row.cellIterator()迭代出所有的单元格。总之,Sheet和Row实现了java.lang.Iterable,如果你用的是jdk1.5以上的版本,你可以使用java高级for循环。

 

Java代码 复制代码
  1. Sheet sheet = wb.getSheetAt(0);   
  2.     for (Iterator rit = sheet.rowIterator(); rit.hasNext(); ) {   
  3.         Row row = (Row)rit.next();   
  4.         for (Iterator cit = row.cellIterator(); cit.hasNext(); ) {   
  5.             Cell cell = (Cell)cit.next();   
  6.             // Do something here   
  7.         }   
  8.     }   
  9.                     HSSFSheet sheet = wb.getSheetAt(0);   
  10.     for (Iterator<HSSFRow> rit = (Iterator<HSSFRow>)sheet.rowIterator(); rit.hasNext(); ) {   
  11.         HSSFRow row = rit.next();   
  12.         for (Iterator<HSSFCell> cit = (Iterator<HSSFCell>)row.cellIterator(); cit.hasNext(); ) {   
  13.             HSSFCell cell = cit.next();   
  14.             // Do something here   
  15.         }   
  16.     }  
Java代码 复制代码
  1. <SPAN style="FONT-SIZE: medium">Sheet sheet = wb.getSheetAt(0);   
  2.     for (Iterator rit = sheet.rowIterator(); rit.hasNext(); ) {   
  3.         Row row = (Row)rit.next();   
  4.         for (Iterator cit = row.cellIterator(); cit.hasNext(); ) {   
  5.             Cell cell = (Cell)cit.next();   
  6.             // Do something here   
  7.         }   
  8.     }   
  9.                     HSSFSheet sheet = wb.getSheetAt(0);   
  10.     for (Iterator<HSSFRow> rit = (Iterator<HSSFRow>)sheet.rowIterator(); rit.hasNext(); ) {   
  11.         HSSFRow row = rit.next();   
  12.         for (Iterator<HSSFCell> cit = (Iterator<HSSFCell>)row.cellIterator(); cit.hasNext(); ) {   
  13.             HSSFCell cell = cit.next();   
  14.             // Do something here   
  15.         }   
  16.     }   
  17. </SPAN>  
Sheet sheet = wb.getSheetAt(0);
	for (Iterator rit = sheet.rowIterator(); rit.hasNext(); ) {
		Row row = (Row)rit.next();
		for (Iterator cit = row.cellIterator(); cit.hasNext(); ) {
			Cell cell = (Cell)cit.next();
			// Do something here
		}
	}
					HSSFSheet sheet = wb.getSheetAt(0);
	for (Iterator<HSSFRow> rit = (Iterator<HSSFRow>)sheet.rowIterator(); rit.hasNext(); ) {
		HSSFRow row = rit.next();
		for (Iterator<HSSFCell> cit = (Iterator<HSSFCell>)row.cellIterator(); cit.hasNext(); ) {
			HSSFCell cell = cit.next();
			// Do something here
		}
	}

 

java高级for循环迭代行和单元格

 

Java代码 复制代码
  1. Sheet sheet = wb.getSheetAt(0);   
  2.     for (Row row : sheet) {   
  3.         for (Cell cell : row) {   
  4.             // Do something here   
  5.         }   
  6.     }  
Java代码 复制代码
  1. <SPAN style="FONT-SIZE: medium">Sheet sheet = wb.getSheetAt(0);   
  2.     for (Row row : sheet) {   
  3.         for (Cell cell : row) {   
  4.             // Do something here   
  5.         }   
  6.     }   
  7. </SPAN>  
Sheet sheet = wb.getSheetAt(0);
	for (Row row : sheet) {
		for (Cell cell : row) {
			// Do something here
		}
	}

 

9.  得到单元格的内容

 

     想得到单元格的内容之前,首先要知道单元格的类型,因此你要先判断单元格的类型之后选择合适的方法得到单元格的值。下面的代码,循环得到一个Sheet所有的单元格。

 

Java代码 复制代码
  1. public void getCellValue() throws Exception {   
  2.         InputStream inp = new FileInputStream("D:\\hjn.xls");   
  3.         HSSFWorkbook wb = new HSSFWorkbook(new POIFSFileSystem(inp));   
  4.         Sheet sheet1 = wb.getSheetAt(0);   
  5.         for (Row row : sheet1) {   
  6.             for (Cell cell : row) {   
  7.                 CellReference cellRef = new CellReference(row.getRowNum(), cell   
  8.                         .getColumnIndex());   
  9.                 System.out.print(cellRef.formatAsString());   
  10.                 System.out.print(" - ");   
  11.   
  12.                 switch (cell.getCellType()) {   
  13.                 case Cell.CELL_TYPE_STRING:   
  14.                     System.out.println(cell.getRichStringCellValue()   
  15.                             .getString());   
  16.                     break;   
  17.                 case Cell.CELL_TYPE_NUMERIC:   
  18.                     if (DateUtil.isCellDateFormatted(cell)) {   
  19.                         System.out.println(cell.getDateCellValue());   
  20.                     } else {   
  21.                         System.out.println(cell.getNumericCellValue());   
  22.                     }   
  23.                     break;   
  24.                 case Cell.CELL_TYPE_BOOLEAN:   
  25.                     System.out.println(cell.getBooleanCellValue());   
  26.                     break;   
  27.                 case Cell.CELL_TYPE_FORMULA:   
  28.                     System.out.println(cell.getCellFormula());   
  29.                     break;   
  30.                 default:   
  31.                     System.out.println();   
  32.                 }   
  33.             }   
  34.         }   
  35.   
  36.     }  
Java代码 复制代码
  1. <SPAN style="FONT-SIZE: medium">public void getCellValue() throws Exception {   
  2.         InputStream inp = new FileInputStream("D:\\hjn.xls");   
  3.         HSSFWorkbook wb = new HSSFWorkbook(new POIFSFileSystem(inp));   
  4.         Sheet sheet1 = wb.getSheetAt(0);   
  5.         for (Row row : sheet1) {   
  6.             for (Cell cell : row) {   
  7.                 CellReference cellRef = new CellReference(row.getRowNum(), cell   
  8.                         .getColumnIndex());   
  9.                 System.out.print(cellRef.formatAsString());   
  10.                 System.out.print(" - ");   
  11.   
  12.                 switch (cell.getCellType()) {   
  13.                 case Cell.CELL_TYPE_STRING:   
  14.                     System.out.println(cell.getRichStringCellValue()   
  15.                             .getString());   
  16.                     break;   
  17.                 case Cell.CELL_TYPE_NUMERIC:   
  18.                     if (DateUtil.isCellDateFormatted(cell)) {   
  19.                         System.out.println(cell.getDateCellValue());   
  20.                     } else {   
  21.                         System.out.println(cell.getNumericCellValue());   
  22.                     }   
  23.                     break;   
  24.                 case Cell.CELL_TYPE_BOOLEAN:   
  25.                     System.out.println(cell.getBooleanCellValue());   
  26.                     break;   
  27.                 case Cell.CELL_TYPE_FORMULA:   
  28.                     System.out.println(cell.getCellFormula());   
  29.                     break;   
  30.                 default:   
  31.                     System.out.println();   
  32.                 }   
  33.             }   
  34.         }   
  35.   
  36.     }</SPAN>  
public void getCellValue() throws Exception {
		InputStream inp = new FileInputStream("D:\\hjn.xls");
		HSSFWorkbook wb = new HSSFWorkbook(new POIFSFileSystem(inp));
		Sheet sheet1 = wb.getSheetAt(0);
		for (Row row : sheet1) {
			for (Cell cell : row) {
				CellReference cellRef = new CellReference(row.getRowNum(), cell
						.getColumnIndex());
				System.out.print(cellRef.formatAsString());
				System.out.print(" - ");

				switch (cell.getCellType()) {
				case Cell.CELL_TYPE_STRING:
					System.out.println(cell.getRichStringCellValue()
							.getString());
					break;
				case Cell.CELL_TYPE_NUMERIC:
					if (DateUtil.isCellDateFormatted(cell)) {
						System.out.println(cell.getDateCellValue());
					} else {
						System.out.println(cell.getNumericCellValue());
					}
					break;
				case Cell.CELL_TYPE_BOOLEAN:
					System.out.println(cell.getBooleanCellValue());
					break;
				case Cell.CELL_TYPE_FORMULA:
					System.out.println(cell.getCellFormula());
					break;
				default:
					System.out.println();
				}
			}
		}

	}

 

10. 文本提取

 

poi的ExcelExtractor可以抽取Cell中的值。org.apache.poi.ss.extractor 为抽取类的接口,ExcelExtractor, XSSFExcelExtractor实现了该接口。

 

Java代码 复制代码
  1. InputStream inp = new FileInputStream("D:\\hjn.xls");   
  2.         HSSFWorkbook  wb = new HSSFWorkbook(new POIFSFileSystem(inp));   
  3.            
  4.         ExcelExtractor extractor = new ExcelExtractor(wb);   
  5.   
  6.         extractor.setFormulasNotResults(true);   
  7.         extractor.setIncludeSheetNames(true);   
  8.         String text = extractor.getText();   
  9.         System.out.println(text);  
Java代码 复制代码
  1. <SPAN style="FONT-SIZE: medium">InputStream inp = new FileInputStream("D:\\hjn.xls");   
  2.         HSSFWorkbook  wb = new HSSFWorkbook(new POIFSFileSystem(inp));   
  3.            
  4.         ExcelExtractor extractor = new ExcelExtractor(wb);   
  5.   
  6.         extractor.setFormulasNotResults(true);   
  7.         extractor.setIncludeSheetNames(true);   
  8.         String text = extractor.getText();   
  9.         System.out.println(text);</SPAN>  
InputStream inp = new FileInputStream("D:\\hjn.xls");
		HSSFWorkbook  wb = new HSSFWorkbook(new POIFSFileSystem(inp));
		
		ExcelExtractor extractor = new ExcelExtractor(wb);

		extractor.setFormulasNotResults(true);
		extractor.setIncludeSheetNames(true);
		String text = extractor.getText();
		System.out.println(text);

 

 11. 填充和颜色

 

Java代码 复制代码
  1. public void fillAndColors() throws Exception{   
  2.         Workbook wb = new HSSFWorkbook();   
  3.         Sheet sheet = wb.createSheet("new sheet");   
  4.   
  5.         // Create a row and put some cells in it. Rows are 0 based.   
  6.         Row row = sheet.createRow((short1);   
  7.   
  8.         // Aqua background   
  9.         CellStyle style = wb.createCellStyle();   
  10.         style.setFillBackgroundColor(IndexedColors.BLUE.getIndex());   
  11.         style.setFillPattern(CellStyle.ALIGN_FILL);   
  12.         Cell cell = row.createCell((short1);   
  13.         cell.setCellValue("X");   
  14.         cell.setCellStyle(style);   
  15.   
  16.         // Orange "foreground", foreground being the fill foreground not the font color.   
  17.         style = wb.createCellStyle();   
  18.         style.setFillForegroundColor(IndexedColors.ORANGE.getIndex());   
  19.         style.setFillPattern(CellStyle.SOLID_FOREGROUND);   
  20.         cell = row.createCell((short2);   
  21.         cell.setCellValue("X");   
  22.         cell.setCellStyle(style);   
  23.   
  24.         // Write the output to a file   
  25.         FileOutputStream fileOut = new FileOutputStream("workbook.xls");   
  26.         wb.write(fileOut);   
  27.         fileOut.close();   
  28.   
  29.     }  
Java代码 复制代码
  1. <SPAN style="FONT-SIZE: medium">public void fillAndColors() throws Exception{   
  2.         Workbook wb = new HSSFWorkbook();   
  3.         Sheet sheet = wb.createSheet("new sheet");   
  4.   
  5.         // Create a row and put some cells in it. Rows are 0 based.   
  6.         Row row = sheet.createRow((short1);   
  7.   
  8.         // Aqua background   
  9.         CellStyle style = wb.createCellStyle();   
  10.         style.setFillBackgroundColor(IndexedColors.BLUE.getIndex());   
  11.         style.setFillPattern(CellStyle.ALIGN_FILL);   
  12.         Cell cell = row.createCell((short1);   
  13.         cell.setCellValue("X");   
  14.         cell.setCellStyle(style);   
  15.   
  16.         // Orange "foreground", foreground being the fill foreground not the font color.   
  17.         style = wb.createCellStyle();   
  18.         style.setFillForegroundColor(IndexedColors.ORANGE.getIndex());   
  19.         style.setFillPattern(CellStyle.SOLID_FOREGROUND);   
  20.         cell = row.createCell((short2);   
  21.         cell.setCellValue("X");   
  22.         cell.setCellStyle(style);   
  23.   
  24.         // Write the output to a file   
  25.         FileOutputStream fileOut = new FileOutputStream("workbook.xls");   
  26.         wb.write(fileOut);   
  27.         fileOut.close();   
  28.   
  29.     }</SPAN>  
public void fillAndColors() throws Exception{
		Workbook wb = new HSSFWorkbook();
	    Sheet sheet = wb.createSheet("new sheet");

	    // Create a row and put some cells in it. Rows are 0 based.
	    Row row = sheet.createRow((short) 1);

	    // Aqua background
	    CellStyle style = wb.createCellStyle();
	    style.setFillBackgroundColor(IndexedColors.BLUE.getIndex());
	    style.setFillPattern(CellStyle.ALIGN_FILL);
	    Cell cell = row.createCell((short) 1);
	    cell.setCellValue("X");
	    cell.setCellStyle(style);

	    // Orange "foreground", foreground being the fill foreground not the font color.
	    style = wb.createCellStyle();
	    style.setFillForegroundColor(IndexedColors.ORANGE.getIndex());
	    style.setFillPattern(CellStyle.SOLID_FOREGROUND);
	    cell = row.createCell((short) 2);
	    cell.setCellValue("X");
	    cell.setCellStyle(style);

	    // Write the output to a file
	    FileOutputStream fileOut = new FileOutputStream("workbook.xls");
	    wb.write(fileOut);
	    fileOut.close();

	}

 

12. 合并单元格

 

Java代码 复制代码
  1. public void mergingCell() throws Exception{   
  2.         Workbook wb = new HSSFWorkbook();   
  3.         Sheet sheet = wb.createSheet("new sheet");   
  4.         Row row = sheet.createRow((short1);   
  5.         Cell cell = row.createCell((short1);   
  6.         cell.setCellValue("This is a test of merging");   
  7.   
  8.         sheet.addMergedRegion(new CellRangeAddress(1// first row (0-based)   
  9.                 4// last row (0-based)   
  10.                 1// first column (0-based)   
  11.                 6 // last column (0-based)   
  12.                 ));   
  13.   
  14.         // Write the output to a file   
  15.         FileOutputStream fileOut = new FileOutputStream("workbook.xls");   
  16.         wb.write(fileOut);   
  17.         fileOut.close();   
  18.   
  19.     }  
Java代码 复制代码
  1. <SPAN style="FONT-SIZE: medium">public void mergingCell() throws Exception{   
  2.         Workbook wb = new HSSFWorkbook();   
  3.         Sheet sheet = wb.createSheet("new sheet");   
  4.         Row row = sheet.createRow((short1);   
  5.         Cell cell = row.createCell((short1);   
  6.         cell.setCellValue("This is a test of merging");   
  7.   
  8.         sheet.addMergedRegion(new CellRangeAddress(1// first row (0-based)   
  9.                 4// last row (0-based)   
  10.                 1// first column (0-based)   
  11.                 6 // last column (0-based)   
  12.                 ));   
  13.   
  14.         /
    分享到:
    评论

相关推荐

    POI学习笔记详细说明

    POI学习笔记第二版更详细的POI学习笔记第二版更详细的

    POI学习笔记

    "POI学习笔记" POI(Apache POI)是一款流行的Java库,用于处理Microsoft Office文件格式,包括Excel、Word、PowerPoint等。POI提供了一个简洁和灵活的API,允许开发者轻松地读取、写入和操作Office文件。 POI的...

    POI的学习笔记

    ### POI学习笔记知识点解析 #### 一、POI简介 Apache POI是一个开源的Java API,用于处理Microsoft Office格式的文件,包括Excel (.xls, .xlsx), PowerPoint (.ppt, .pptx) 和 Word (.doc, .docx)。POI提供了一套...

    POI 学习资料POI 学习资料POI 学习资料

    - 官方文档:Apache POI 提供了详尽的开发者指南和API文档,是学习的基础。 - 在线教程:许多网站提供 POI 教程,例如 Baeldung、Stack Overflow 等。 - 示例代码:GitHub 上有大量使用 POI 的开源项目,可以参考...

    POI导出 POI导出 POI导出

    POI导出POI导出POI导出POI导出POI导出POI导出POI导出POI导出POI导出POI导出POI导出POI导出POI导出POI导出POI导出POI导出POI导出POI导出POI导出POI导出POI导出POI导出POI导出POI导出POI导出POI导出POI导出POI导出POI...

    poi全家桶ooxml-schemas/poi/poi-examples/poi-ooxml/poi-ooxml-schemas/poi-scratchpad

    2. **poi**: 这是Apache POI的核心库,主要负责处理Microsoft Office的二进制文件格式,如老版本的Excel(.xls)和PowerPoint(.ppt)。这个库提供了API,可以创建、修改和读取这些文件。 3. **poi-examples**: 这...

    POI poi相关所有jar包 poi jar包 poi最全jar包

    3. **二进制格式支持**:`poi-scratchpad.jar` 包含了处理早期的二进制Microsoft Office格式,如老版本的Excel (.xls) 和 Word (.doc) 的代码。 4. **Java对象模型支持**:`poi-ooxml-full-model.jar`, `poi-ooxml-...

    poi的所有jar包,poi, poi-ooxml,poi-ooxml-schemas的各个版本jar

    - POI库的API设计相对复杂,学习曲线较陡峭,需要花时间去熟悉各种类和方法。 - 当处理复杂的公式或图表时,POI可能无法完全模拟Excel的所有特性,因此在某些情况下可能需要使用其他工具或库进行补充。 - 在更新版本...

    poi excel poi excel poi excel

    对于更深入的学习和了解 POI 的使用方法,可以参考以下资源: - **官方文档**:[http://jakarta.apache.org/poi/](http://jakarta.apache.org/poi/) - **HSSF 快速指南**:...

    poi-3.17 poi-3.16

    这些ZIP文件包含了Apache POI的二进制发行版,包括必要的JAR文件和其他资源。开发者可以通过解压这些文件,将对应的JAR添加到项目类路径中,然后就可以在Java程序中使用Apache POI API来操作Excel、Word和PowerPoint...

    poi3.8快速学习指南

    poi3.8快速学习指南

    poi多级表头导出模板

    poi多级表头导出模板

    2019版本poi 2019高德poi 2019百度poi

    而“二级类别”和“一级类别”可能分别指的是POI的详细分类,例如一级类别可能是“餐饮”,二级类别则可能是“快餐”、“正餐”等更具体的分类。这样的分类体系有助于用户根据需求快速筛选和分析数据。 综合来看,...

    POI中文帮助文档_POI_

    Apache POI是一个开源项目,主要用于读取和写入Microsoft Office格式的文件,如Word(.doc/.docx)、Excel(.xls/.xlsx)和PowerPoint(.ppt/.pptx)。这个“POI中文帮助文档”提供了全面的指南,帮助开发者理解和...

    poi jar包 官网下载 最新poi官网资源

    关于poi ,Apache在今年,也就是在2017年9月15日 正式发布了POI 3.17版本, Apache POI团队对于3.17版本进行了一些功能的修复。主要是几个新的功能区域和许多错误修复。 POI 3.17是支持Java 6的最后一个版本。下一个...

    百度poi,高德poi数据数据免费下载

    在IT行业中,POI...免费下载的POI数据资源对于学习、研究或开发基于位置的服务非常有帮助,但使用时需要注意版权和合规性问题。通过理解并有效利用这些数据,开发者能够构建出更智能、更贴近用户需求的地图应用。

    poi源码学习__孔浩

    这个压缩包“poi源码和思维导图”包含了对Apache POI源代码的学习资料,以及可能的配套思维导图,对于深入理解POI的工作原理和开发技巧非常有帮助。 Apache POI的核心功能在于它允许Java开发者读写Microsoft Office...

Global site tag (gtag.js) - Google Analytics