男怕选错行 2015-10-10 14:14 采纳率: 9.1%
浏览 2216
已结题

关于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;
    }![图片说明](https://img-ask.csdn.net/upload/201510/10/1444486368_121024.png)

但是这个代码有个bug,比如下图
2中,是个合并单元格,向上没有找到合并值,再向左时,找到的圆圈1中是个合并值,但是1和2根本不是一起的单元格,但是按这个算法却得到了1中的值,怎么解决这个问题,加急,谢谢了,我没分,真的很想找人帮忙我。

  • 写回答

4条回答 默认 最新

  • 男怕选错行 2015-10-10 14:16
    关注

    图片说明

    评论

报告相同问题?

悬赏问题

  • ¥100 Jenkins自动化部署—悬赏100元
  • ¥15 关于#python#的问题:求帮写python代码
  • ¥20 MATLAB画图图形出现上下震荡的线条
  • ¥15 关于#windows#的问题:怎么用WIN 11系统的电脑 克隆WIN NT3.51-4.0系统的硬盘
  • ¥15 perl MISA分析p3_in脚本出错
  • ¥15 k8s部署jupyterlab,jupyterlab保存不了文件
  • ¥15 ubuntu虚拟机打包apk错误
  • ¥199 rust编程架构设计的方案 有偿
  • ¥15 回答4f系统的像差计算
  • ¥15 java如何提取出pdf里的文字?