C# 读取 Excel 中的合并单元格内容。

C# 读取 Excel 中的合并单元格内容。

由于 某些 Excel 的格式过于复杂,用 OLEDB 来读取不大合适。
那么只好使用 Microsoft.Office.Interop.Excel 来读取了。

写代码的时候,发现这样的问题。
如果简单的通过 xlSheet.Cells[row, col].Text 方式来处理的话。
如果存在有 合并单元格的情况。
那么只有 左上角的那个单元格,能读取到数据,其他单元读取不到数据了。

如图:


普通单元格读取的话,

王五的 分机号 [B4] 与 张A 的 分机号 [B6] , 将读取不出来。

因为数据被存储在 [B3] 与 [B5] 单元格上。

百度一下的结果,可以通过 cell.MergeCells 来判断,当前单元格, 是不是合并单元格。

然后再通过 cell.MergeArea.Row 与 cell.MergeArea.Column 来定位到 左上角单元格的坐标

最终的代码如下:


/// <summary>
/// 获取数据.
/// </summary>
/// <param name="row"></param>
/// <param name="col"></param>
/// <returns></returns>
public string GetValue(int row, int col)
{
// 取得单元格.
var cell = xlSheet.Cells[row, col];
if (cell.MergeCells == true)
{
// 本单元格是 “合并单元格”
if (cell.MergeArea.Row == row
&& cell.MergeArea.Column == col)
{
// 当前单元格 就是 合并单元格的 左上角 内容.
return cell.Text;
}
else
{
// 返回 合并单元格的 左上角 内容.
return xlSheet.Cells[cell.MergeArea.Row, cell.MergeArea.Column].Text;
}
}
else
{
// 本单元格是 “普通单元格”
// 获取文本信息.
return cell.Text;
}
}


注:xlSheet 是 Excel 工作表对象.

/// <summary>
/// Excel 工作表.
/// </summary>
private Excel.Worksheet xlSheet = null;

 

---------------------------------

第二个判断白浪费资源吧,要是合并单元格直接就返回
xlSheet.Cells[cell.MergeArea.Row, cell.MergeArea.Column].Text

转自:http://hi.baidu.com/wangzhiqing999/blog/item/1fa8ed1a2e5a98eb1bd576b4.html

  • 3
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值