问题描述
- 关于C#读取excel合并字符串,遇到的问题,希望大神们能帮忙,我真的没办法了
-
在C#读取excel合并单元格中,我用的是如下的办法,就是遇到合并单元格,往上,先是同一列,然后cell(row-1,col)去向上寻找合并值,如果也是合并值,且有value,那么就寻找到值了,如果没有,一直到一个不是单元格的,那么结束,再通过cell(row,col-1)向左去寻找合并值,方法同上,代码如下
private string GetCellText(int row,int col,Excel._Worksheet oSheet)
{
string result = "";
bool isFound = false;
int rowEnd = 1;
int colEnd = 1;Excel.Range oRng = (Excel.Range)oSheet.Cells[row,col]; if(oRng.Value2 != null) { result = oRng.Value2.ToString(); isFound = true; } else { if(!(bool)oRng.MergeCells) // 如果该单元格无值且不是合并的,则返回 null { result = null; isFound = true; } } if(!isFound) { // 倒序遍历该列所有行(从倒2行开始),判断是否有合并单元格且有值,如果遇到则已求出, // 如果遇到非合并单元格,则行+1(倒回1行),列同样倒序进行 for( int r = row-1; r >=1 ;r--) { oRng = (Excel.Range)oSheet.Cells[r,col]; if((bool)oRng.MergeCells) { try { if(oRng.Value2 != null) { result = oRng.Value2.ToString(); isFound = true; break; } } catch(Exception) {} } else { rowEnd = r+1; break; } } if(!isFound) { // 倒序遍历该行所有列,判断是否有合并单元格且有值,如果遇到则已求出,如果遇到非合并单元格,则说明数据非法。。。 for( int c = col-1; c >=1 ;c--) { oRng = (Excel.Range)oSheet.Cells[rowEnd,c]; if((bool)oRng.MergeCells) { try { if(oRng.Value2 != null) { result = oRng.Value2.ToString(); isFound = true; break; } } catch(Exception) {} } else { colEnd = c+1; break; } } } if(!isFound) { result = null; } } return result; }![图片说明](http://img.ask.csdn.net/upload/201510/10/1444486368_121024.png)
但是这个代码有个bug,比如下图
2中,是个合并单元格,向上没有找到合并值,再向左时,找到的圆圈1中是个合并值,但是1和2根本不是一起的单元格,但是按这个算法却得到了1中的值,怎么解决这个问题,加急,谢谢了,我没分,真的很想找人帮忙我。
解决方案
解决方案四:
这个是图片。你们看下1和2 都是合并单元格,向左的时候2就把1给读了,怎么办
解决方案五:
这个是图片。你们看下1和2 都是合并单元格,向左的时候2就把1给读了,怎么办
解决方案六:
用vba录制一个宏照着写
解决方案七:
1.第一步判断( (Excel.Range)excelRange.Cells[5,6]).MergeCells确定是否是合并单元格
- 第二步判断( (Excel.Range)excelRange.Cells[5,6]).MergeArea.Row和( (Excel.Range)excelRange.Cells[5,6]).MergeArea.Column判断合并单元格的起始行号和列号
时间: 2024-12-21 22:07:24