问候StackOverflow'lings,
让我解释一下我的困境:
让我们说我有3列(总共9列,因为它们以3的数字合并)在一行中,每列3列都有数据 在正下方的行中,我有9列,每个单元格中都有数据。
这个想法是用3列读取第一行,然后找出这些列跨越多长时间,这样我就可以在创建生成的xml时分配正确的值。下面简要介绍一下我想要实现的目标:
第1行第1列(范围合并为3列)=足球队 第2行第1列,第2列将分别保存有关足球队的不同数据 第1行第2列(范围合并为3列)=足球运动员 第2行第4,5,6行将分别保存关于足球运动员的不同数据 第1行第3列(范围合并为3列)=足球财务 第2行第7,8,9行将分别保存有关足球财务的不同数据
出于某种原因,当我读到第一行时,我得到了值:
[0] =“足球队” [1] = null [2] = null [4] =“足球运动员”
但是当我读到第二行时,我得到了完整的列数组(9)!我正在使用的代码如下所示:
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;
非常感谢任何正确方向的帮助/指导/拍击!
答案 0 :(得分:3)
当您合并单元格时,单元格仍然存在(就您的代码而言),它只是具有空值。因此,合并单元格组中的第一个单元格将具有该值。
阅读完您的评论并重新阅读您的代码后,我认为问题在于您如何选择最后一栏:
Range dataRange = worksheet.get_Range("A1", Missing.Value);
dataRange = dataRange.get_End(XlDirection.xlRight);
我经常发现在右边做一个'结束'并不一定得到右边的最后一项,特别是如果单元格之间有空格(这里就是这种情况,因为单元格是合并的)。所以这样做可能会更好(通过一些清理来保存一些行) - 'XFD'是Excel 2007及更高版本中的最后一列:
Range lastCell = worksheet.get_Range("XFD1").get_End(XlDirection.xlLeft);
Range dataRange = worksheet.get_Range("A1", lastCell);
object[,] dataValues = (object[,])dataRange.Value2;
请注意,此代码不会获得第三组中的最后2个空值 - 唯一的方法是明确设置范围,如下所示:
Range dateRange = worksheet.get_Range("A1", "I1");