[英]C# ExcelDNA read from dynamic array
我第一次在这里发帖。 通常,我发现一个人可能需要回答的所有问题。 在这种情况下,对于我的一生,我无法弄清这一点,因此请继续。
我尝试使用ExcelDNA读取Excel中的一系列值。 该范围将始终具有2列,但是行数是动态的,如下所示:
n行数
字符串,浮点数字符串,浮点数...第n行
现在,我可以使用ExcelDNA和ExcelReference读取范围,如下所示:
object[,] bencharray = ExcelData.ReadArrayValue(0, 10, 0, 1, "Sheet1");
public static class ExcelData
{
public static dynamic ReadArrayValue(int rf, int rl, int cf, int cl, string sheet)
{
//This reads an array with 4 co-ordinates from the specified sheet
ExcelReference readarray = new ExcelReference(rf, rl, cf, cl, sheet);
return readarray.GetValue();
}
}
因此,这将从单元格A1开始静态读取具有2列的11行范围。
我正在寻找类似于VBA的xlDown或UsedRange。 理想情况下,当范围的底部为空白时,这将停止,并允许继续使用位于表下方的单元格。
我不确定是否应该使用Interop.Excel或如何使用它。
任何帮助,将不胜感激。 非常感谢
您可以使用C API来实现。 您需要xlcSelectEnd
函数,该函数可以在一个方向上扩展选择范围。 所以你会打电话
XlCall.Excel(XlCall.xlcSelectEnd, 4);
方向是:
这意味着您必须设置一个选择( xlcSelect
),然后扩展它( xlcSelectEnd
),然后获得当前选择( xlfSelection
)。
关于Google网上论坛的讨论也可能会有用: https : //groups.google.com/group/exceldna/browse_frm/thread/cc87114539c78f53 。
所有这些听起来有些复杂,让我认为您还应该考虑COM API。
使用Govert的示例ExcelSelectionHelper,您可以执行以下操作:
鉴于以下列举:
public enum DirectionType
{
Up = 3,
ToRight = 2,
Down = 4,
ToLeft = 1
}
您可以这样做:
public static ExcelReference End( this ExcelReference reference, DirectionType direction )
{
ExcelReference end = null;
using ( new ExcelSelectionHelper( reference ) )
{
// myReference is selected now...
XlCall.Excel( XlCall.xlcSelectEnd, (int)direction );
var selection = XlCall.Excel( XlCall.xlfSelection ) as ExcelReference;
var row = selection.RowFirst;
var col = selection.ColumnFirst;
end = new ExcelReference( row, row, col, col, selection.SheetId );
}
return end;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.