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

推荐订阅源

P
Proofpoint News Feed
F
Full Disclosure
小众软件
小众软件
V
V2EX
月光博客
月光博客
人人都是产品经理
人人都是产品经理
有赞技术团队
有赞技术团队
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
博客园 - 司徒正美
M
MIT News - Artificial intelligence
Last Week in AI
Last Week in AI
The Register - Security
The Register - Security
T
Tailwind CSS Blog
Recorded Future
Recorded Future
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
aimingoo的专栏
aimingoo的专栏
Apple Machine Learning Research
Apple Machine Learning Research
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
阮一峰的网络日志
阮一峰的网络日志
B
Blog RSS Feed
IT之家
IT之家
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
F
Fortinet All Blogs
C
Check Point Blog
云风的 BLOG
云风的 BLOG
T
The Blog of Author Tim Ferriss
雷峰网
雷峰网
GbyAI
GbyAI
Microsoft Azure Blog
Microsoft Azure Blog
Hugging Face - Blog
Hugging Face - Blog
S
SegmentFault 最新的问题
V
Visual Studio Blog
J
Java Code Geeks
Y
Y Combinator Blog
A
About on SuperTechFans
Blog — PlanetScale
Blog — PlanetScale
美团技术团队
Vercel News
Vercel News
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
Stack Overflow Blog
Stack Overflow Blog
I
InfoQ
H
Help Net Security
MongoDB | Blog
MongoDB | Blog
酷 壳 – CoolShell
酷 壳 – CoolShell
Engineering at Meta
Engineering at Meta
Martin Fowler
Martin Fowler
The Cloudflare Blog
博客园 - 三生石上(FineUI控件)
D
Docker
The GitHub Blog
The GitHub Blog

博客园 - 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 ");
                }

            }
            
        }