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

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

免责声明:本网信息来自于互联网,目的在于传递更多信息,并不代表本网赞同其观点。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,并请自行核实相关内容。本站不承担此类作品侵权行为的直接责任及连带责任。如若本网有任何内容侵犯您的权益,请及时联系我们,本站将会在24小时内处理完毕。
相关文章
返回顶部