惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

V
V2EX
Y
Y Combinator Blog
博客园_首页
V
Visual Studio Blog
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
阮一峰的网络日志
阮一峰的网络日志
Hugging Face - Blog
Hugging Face - Blog
宝玉的分享
宝玉的分享
B
Blog
博客园 - 三生石上(FineUI控件)
小众软件
小众软件
WordPress大学
WordPress大学
L
LangChain Blog
爱范儿
爱范儿
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
P
Proofpoint News Feed
Blog — PlanetScale
Blog — PlanetScale
C
Check Point Blog
博客园 - 聂微东
云风的 BLOG
云风的 BLOG
Microsoft Security Blog
Microsoft Security Blog
博客园 - 叶小钗
酷 壳 – CoolShell
酷 壳 – CoolShell
H
Help Net Security

博客园 - HQT

类似 MSN 的提示窗口 asp.net 1.1 部分按钮不能提交 - canNOT submit issue .NET 2.0 和1.1 共用时,出现"服务器应用程序不可用"的错误. - HQT 检索 COM 类工厂中 CLSID 为 {00024500-0000-0000-C000-000000000046} 的组件时失败,原因是出现以下错误: 80070005 Oracle 数字转换为英文的函数 取中英文数字混合的长度 ( C# + ORACLE ) - HQT 找不到可安装的 ISAM -- ConnectionString 问题.... .net 使用 ACCESS 库一个小问题 C# 中转换 vb.net 换行符等Ascii 字符 SQLServer 安装过程出错 安装程序配置服务器失败 (解决篇) Web 横向打印 Excel 小写金额转大写 可随文本变化而出现不同选择项的文本框+下拉列表选择 关于 Excel 的结束进程的方法讨论 如何判断Excel单元格是否为合并单元格 DNN-HttpModule.UrlRewrite( url重写 ) Xceed Components DNN 4.0 安装 together2.0 for vs.net2003 下载
获取Excel合并单元格数据-通用方法
HQT · 2005-11-24 · via 博客园 - HQT

主要是通过判断是否为合并单元格,和判断是否有值 , 以及 Excel 合并单元格只去最左上的一个单元格作为合并单元格的数据 来实现该获取值的方法。
代码如下:

    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行),列同样倒序进行
                forint 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)
                
{
                    
// 倒序遍历该行所有列,判断是否有合并单元格且有值,如果遇到则已求出,如果遇到非合并单元格,则说明数据非法。。。
                    forint 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;
        }

获取值测试:

private void GetAllText()
        
{
            Excel.Application oXL;
            Excel._Workbook oWB;
            Excel._Worksheet oSheet;
            
object missing = System.Type.Missing;

            
//创建Excel实例
            oXL = new Excel.Application();

            
//打开已有的工作簿
            oWB = oXL.Workbooks.Open(@"E:\BookTest.xls",missing,missing,missing,missing,missing,missing,
                missing,missing,missing,missing,missing,missing,missing,missing);
            oSheet 
= (Excel.Worksheet)oWB.Sheets.get_Item(1);
            
            
// 遍历获取 10行 10列 数据
            for(int i=1;i<10;i++)
            
{
                
for(int j=1;j<10;j++)
                
{
                    
string str = GetCellTest(i,j,oSheet);
                    richTextBox1.AppendText(
" i : "+i.ToString() + " , j : "+ j.ToString() + " , value : "+ str +" \r\n ");
                }

            }
            
        }