poi获取合并单元格内的第一行第一列的值

当读取如图所示的excel时,显示为第1行 第1列 的内容是:合并单元格
其它在合并单元格区域内的单元格不显示
示例代码如下:
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException; import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.DataFormatter;
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.util.CellRangeAddress;
import org.apache.poi.xssf.usermodel.XSSFWorkbook; public class TestExcel {
private static final DataFormatter FORMATTER = new DataFormatter(); /**
* 获取单元格内容
*
* @param cell
* 单元格对象
* @return 转化为字符串的单元格内容
*/
private static String getCellContent(Cell cell) {
return FORMATTER.formatCellValue(cell);
} public static boolean isMergedRegion(Sheet sheet, Cell 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(Sheet sheet, Cell cell) {
// 获得一个 sheet 中合并单元格的数量
int sheetmergerCount = sheet.getNumMergedRegions();
// 便利合并单元格
for (int i = 0; i < sheetmergerCount; i++) {
// 获得合并单元格
CellRangeAddress ca = sheet.getMergedRegion(i);
// 获得合并单元格的起始行, 结束行, 起始列, 结束列
int firstC = ca.getFirstColumn();
int firstR = ca.getFirstRow(); if (cell.getColumnIndex() == firstC && cell.getRowIndex() == firstR) {
return "第" + (cell.getRowIndex() + 1) + "行 第" + (cell.getColumnIndex() + 1) + "列 的内容是: "
+ getCellContent(cell) + ",";
} }
return "";
} private static String getExcelValue(String filePath, int sheetIndex) {
String value = "";
try {
// 创建对Excel工作簿文件
Workbook book = null;
try {
book = new XSSFWorkbook(new FileInputStream(filePath));
} catch (Exception ex) {
book = new HSSFWorkbook(new FileInputStream(filePath));
} Sheet sheet = book.getSheetAt(sheetIndex);
// 获取到Excel文件中的所有行数
int rows = sheet.getPhysicalNumberOfRows();
// System.out.println("rows:" + rows);
// 遍历行 for (int i = 0; i < rows; i++) {
// 读取左上端单元格
Row row = sheet.getRow(i);
// 行不为空
if (row != null) {
// 获取到Excel文件中的所有的列
int cells = row.getPhysicalNumberOfCells();
// System.out.println("cells:" + cells); // 遍历列
for (int j = 0; j < cells; j++) {
// 获取到列的值
Cell cell = row.getCell(j);
if (cell != null) {
if (isMergedRegion(sheet, cell)) {
value += getMergedRegionValue(sheet, cell);
} else {
value += "第" + (i + 1) + "行 第" + (j + 1) + "列 的内容是: " + getCellContent(cell) + ",";
} }
} }
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} return value; } public static void main(String[] args) { String filePath = "F://example.xls";
int sheetIndex = 0; String[] val = getExcelValue(filePath, sheetIndex).split(",");
for (int i = 0; i < val.length; i++) {
System.out.println(val[i]);
}
}
}
poi获取合并单元格内的第一行第一列的值的更多相关文章
- poi读取合并单元格
poi读取合并单元格 学习了:http://blog.csdn.net/ycb1689/article/details/9764191 进行了列合并单元格的修正:原来是我自己找错了地方: import ...
- poi excel 合并单元格
结论:final CellRangeAddress cra = new CellRangeAddress(rowId, rowId + rowSkip, colId, colId + c ...
- Java导出Excel表,POI 实现合并单元格以及列自适应宽度(转载)
POI是apache提供的一个读写Excel文档的开源组件,在操作excel时常要合并单元格,合并单元格的方法是: sheet.addMergedRegion(new CellRangeAddress ...
- POI 实现合并单元格以及列自适应宽度
POI是apache提供的一个读写Excel文档的开源组件,在操作excel时常要合并单元格,合并单元格的方法是: sheet.addMergedRegion(new CellRangeAddress ...
- poi的合并单元格和冻结行列
//创建工作薄(excel) Workbook wb = new HSSFWorkbook(); //创建sheet Sheet createSheet = wb.createSheet(" ...
- 在一个Excel单元格内输入多行内容
有时候,我们想在一个Excel单元格中输入多行内容,可以根据不同情况选择下面的方法来实现: 方法一:如果有大量的单元格需要这样做,采取此种设置格式的方法,选中需要这种格式的单元格,执行“格式→单元格” ...
- POI获取excel单元格红色字体,淡蓝色前景色的内容
如果是Microsoft Excel 97-2003 工作表 (.xls) if(31 == cell.getCellStyle().getFillForegroundColor()) //判断单元格 ...
- POI 简单合并单元格
public class MergedCells { /** 测试使用的POI版本是3.1 * @param args */ public static void main(String[] args ...
- Excel表格中单击一个单元格如何将整行整列变色
视图->阅读模式 开启阅读模式后 就会显示如下情景,是的你点击任意单元格后,显示整行/整列
随机推荐
- Qt 配置文件QSettings
QString appDirPath = QCoreApplication::applicationDirPath(); QSettings* configIniRead = new QSetting ...
- 同步异步,阻塞非阻塞 和nginx的IO模型
同步与异步 同步和异步关注的是消息通信机制 (synchronous communication/ asynchronous communication).所谓同步,就是在发出一个*调用*时,在没有得 ...
- Swift - 使用CAKeyframeAnimation实现关键帧动画
1,CAKeyframeAnimation介绍 CAKeyframeAnimation可以实现关键帧动画,这个类可以实现某一属性按照一串的数值进行动画,就像是一帧一帧的制作出来一样. 2,使用样例 ...
- hdu 1300 Pearls
链接:http://acm.hdu.edu.cn/showproblem.php?pid=1300 思路:用dp[i]表示前i种花费最低的情况,则有dp[i]=min(dp[i],dp[j+1]+(( ...
- 【Cocos2d-x for WP8 学习整理】(4)CCTableView 实现《天天爱消除》中的得分榜
接上回 CCScrollView 继续,在GUI 里还有个 CCScrollView 的子类---CCTableView . 这个名字应该是从 IOS 里的 UITableView来的,其实是跟WP8 ...
- redis数据类型之—List
(1)list 简单介绍 list是一个有序的字符串列表,是使用双向列表实现的,可以实现最新消息排行.消息队列等功能. (2) list 常用命令
- Android ADB命令大全
通过ADB命令查看wifi密码.MAC地址.设备信息.操作文件.查看文件.日志信息.卸载.启动和安装APK等 ADB很强大,记住一些ADB命令有助于提高工作效率. 获取序列号: adb get-s ...
- Java数组技巧攻略
Java数组技巧攻略 0. 声明一个数组(Declare an array) String[] aArray = new String[5]; String[] bArray = {" ...
- 关于HTML5的拖拽
不介绍具体情况,先看API,注意看后面括号的说明 dragstart:拖拽开始(应用于被拖拽对象) drag:拖拽中(应用于被拖拽对象) dragenter:拖拽到指定位置(应用于拖拽目标) drag ...
- uploadify前台上传文件,java后台处理的例子
1.先创建一个简单的web项目upload (如图1-1) 2.插件的准备 (1).去uploadify的官网下载一个uploadify插件,然后解压新建个js文件夹放进去(这个不强求,只要路径对了就 ...