| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1318 人关注过本帖
标题:十万火急!POI不能准确读取excel批注 求高人帮助!
只看楼主 加入收藏
tanyongji
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2010-1-5
结帖率:0
收藏
 问题点数:0 回复次数:0 
十万火急!POI不能准确读取excel批注 求高人帮助!
试了很久都没法实现这个555 一开始还以为很简单的~ 详情如下                     
我用了POI读取excel单元格值和相应的批注。我是在工作表逐行循环,每一行再循环每个cell,            
如果当前cell的批注不为空,就显示当前cell的内容和相应的批注,cell的内容的确是按每行搜索,
但是如果cell的单元格是公式,当读取当前cell的批注cell.getCellComment().getString().toString()并不是按每行搜索,而是按列搜索出来。我看过很多次代码都不清楚是哪里的问题, 请高手们帮忙下 先谢谢了!

excel中
图片附件: 游客没有浏览图片的权限,请 登录注册


结果
图片附件: 游客没有浏览图片的权限,请 登录注册



excel文件
test.rar (2.21 KB)


程序代码:
   1. import  import  import  import  import org.apache.poi.hssf.usermodel.HSSFWorkbook;  
   7. import org.apache.poi.hssf.usermodel.HSSFSheet;  
   8. import org.apache.poi.hssf.usermodel.HSSFCell;  
   9. import org.apache.poi.hssf.usermodel.HSSFRow;  
  10. import org.apache.poi.poifs.filesystem.POIFSFileSystem;  
  11. import org.apache.poi.hssf.util.HSSFColor;  
  12. import org.apache.poi.ss.usermodel.Cell;  
  13. import org.apache.poi.ss.usermodel.CellStyle;  
  14. import org.apache.poi.ss.usermodel.CreationHelper;  
  15. import org.apache.poi.ss.usermodel.Font;  
  16. import org.apache.poi.ss.usermodel.IndexedColors;  
  17. import org.apache.poi.ss.usermodel.Row;  
  18. import org.apache.poi.ss.usermodel.Sheet;  
  19. import org.apache.poi.ss.usermodel.Workbook;  
  20. import org.apache.poi.ss.usermodel.WorkbookFactory;  
  21. import java.text.DecimalFormat;  
  22. import java.util.Date;  
  23. import org.apache.poi.hssf.usermodel.HSSFDateUtil;  
  24.   
  25. public class readexcel {  
  26.   public readexcel() {  
  27.   }  
  28.     
  29.   private String readformula(Cell cell){  
  30.       DecimalFormat df = new DecimalFormat("0.000");  
  31.    try{  
  32.      return df.format(cell.getNumericCellValue());  
  33.    }catch(Exception e){  
  34.    return "";  
  35.    }  
  36.  }  
  37.   
  38.      //读取有标注的单元格的字符串及相应标注  
  39.   //@param filepath 文件路径  
  40.  public void readDataFromExcel(String filepath){  
  41.       String Strcell="";  
  42.       String comment = "";  
  43.       Sheet sheet=null;  
  44.       try{  
  45.         InputStream is = new FileInputStream(filepath);  
  46.         //根据输入流创建Workbook对象  
  47.         Workbook wb = WorkbookFactory.create(is);  
  48.         //get到Sheet对象  
  49.         int numsheet = wb.getNumberOfSheets();  
  50.         for (int a = 0; a < numsheet; a++) { //循环表格  
  51.           sheet = wb.getSheetAt(a);  
  52. //这个必须用接口  
  53.           for (Row row : sheet) {  
  54.             int filledColumns = row.getLastCellNum();  
  55.                Cell cell = null;  
  56.                // 循环遍历所有列  
  57.                      for (int i = 0; i < filledColumns; i++) {  
  58.                         // 取得当前Cell  
  59.                 cell = row.getCell((short) i);  
  60.               if (cell!=null && cell.getCellComment() != null ) {  
  61.                 Strcell = "";  
  62.                 comment = "";  
  63.   
  64.                 //cell.getCellType是获得cell里面保存的值的type  
  65.                 //如Cell.CELL_TYPE_STRING  
  66.                 switch (cell.getCellType()) {  
  67.                   // 如果当前Cell的Type为NUMERIC  
  68.                   case HSSFCell.CELL_TYPE_NUMERIC:   
  69.               // 判断当前的cell是否为Date  
  70.                     if (HSSFDateUtil.isCellDateFormatted(cell)) {  
  71.                  // 如果是Date类型则,取得该Cell的Date值  
  72.                       Date date = cell.getDateCellValue();  
  73.                  // 把Date转换成本地格式的字符串  
  74.                       Strcell = cell.getDateCellValue().toLocaleString();  
  75.                        }  
  76.               // 如果是纯数字  
  77.                    else {  
  78.                  // 取得当前Cell的数值  
  79.                       Integer num = new Integer((int) cell  
  80.                        .getNumericCellValue());  
  81.                       Strcell = String.valueOf(num);  
  82.                        }  
  83.                     break;  
  84.                   case Cell.CELL_TYPE_BOOLEAN:  
  85.   
  86.                     //得到Boolean对象的方法  
  87.                     //cell.getBooleanCellValue();  
  88.                     break;  
  89.                   case Cell.CELL_TYPE_FORMULA:  
  90.   
  91.                     //读取公式  
  92.                     Strcell = readformula(cell);  
  93.                     break;  
  94.                   case Cell.CELL_TYPE_STRING:  
  95.   
  96.                     //读取String  
  97.                     Strcell = cell.getRichStringCellValue().toString();  
  98.                     break;  
  99.                       
 100.                 }  
 101.                 comment = cell.getCellComment().getString().toString();  
 102.                 System.out.println(Strcell+","+comment);  
 103.               }  
 104.             }  
 105.   
 106.           }  
 107.   
 108.         }  
 109.         is.close();  
 110.   
 111.       }  
 112.       catch(Exception e){  
 113.          e.printStackTrace();  
 114.       }  
 115.   
 116.  }  
 117.   
 118.   
 119.     
 120.   public static void main(String arg[]){  
 121.     readexcel re=new readexcel();  
 122.     re.readDataFromExcel("D:\\temp\\test.xls");  
 123.   }  
 124. } 

搜索更多相关主题的帖子: 批注 POI 高人 excel 
2010-01-10 10:26
快速回复:十万火急!POI不能准确读取excel批注 求高人帮助!
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.089166 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved