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