首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用C#读取.NET中的合并单元格(行)

使用C#读取.NET中的合并单元格(行)
EN

Stack Overflow用户
提问于 2010-11-16 18:14:10
回答 1查看 16.6K关注 0票数 3

问候StackOverflow‘’lings

让我解释一下我的困境:

假设我有3列(总共9列,因为它们被合并为3列)在一行中,这3列中的每一列在其正下方的行中都有数据,我有9列,每个单元格中都有数据。

其思想是读取包含3列的第一行,然后找出这些列的跨度有多长,这样我就可以在创建结果xml时将正确的值赋给。以下是我试图实现的大致目标:

行1列1(范围合并到3列)=足球队行2列1、2、3将分别保存关于足球队的不同数据行1列2(范围合并到3列)=足球运动员行2列4、5、6将分别保存关于足球运动员的不同数据行1列3(范围将合并到3列)=足球财务行2列7、8、9将分别保存关于足球财务的不同数据

由于某种原因,当我读取第一行时,我得到了值:

= "Football Teams“1= null 2= null 4=”足球运动员“

但是当我读取第二行时,我得到了列的完整数组(9)!我使用的代码如下所示:

代码语言:javascript
运行
复制
Range dataRange = worksheet.get_Range("A1", Missing.Value);
dataRange = dataRange.get_End(XlDirection.xlRight);
string dataAddress = dataRange.get_Address(
        false, false, XlReferenceStyle.xlA1,
        Type.Missing, Type.Missing);

dataRange = worksheet.get_Range("A1", dataAddress);
// Cast the range into an object array
object[,] dataValues = (object[,])dataRange.Value2;

任何正确方向的帮助/指导/耳光都将不胜感激!

EN

回答 1

Stack Overflow用户

发布于 2010-11-16 18:28:02

当你合并了单元格后,这些单元格仍然存在(就你的代码而言),只是它们有空值。因此,合并单元格组中的第一个单元格将具有该值。

读完你的评论,再读一遍你的代码,我认为问题出在你如何选择最后一列:

代码语言:javascript
运行
复制
Range dataRange = worksheet.get_Range("A1", Missing.Value);
dataRange = dataRange.get_End(XlDirection.xlRight);

我经常发现,向右做'End‘并不一定会得到右边的最后一项,特别是如果单元格之间有空格(这里就是这种情况,因为单元格被合并了)。所以这样做可能会更好(通过一些清理来保存一些行)- 'XFD‘是Excel 2007和更高版本中的最后一列:

代码语言:javascript
运行
复制
Range lastCell = worksheet.get_Range("XFD1").get_End(XlDirection.xlLeft);
Range dataRange = worksheet.get_Range("A1", lastCell);
object[,] dataValues = (object[,])dataRange.Value2;

请注意,此代码不会获取第三个组中的最后两个空值-唯一的方法是显式设置范围,如下所示:

代码语言:javascript
运行
复制
Range dateRange = worksheet.get_Range("A1", "I1");
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4193033

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档