我第一次在这里发帖。通常情况下,我发现可能需要回答的所有内容。在这种情况下,对于我的生活,我无法弄清楚这一点,所以这里。
我在excel中有一系列值,我试图用ExcelDNA读取。此范围始终有2列,但行数是动态的,如下所示:
n行数
String,float 字符串,浮动 ... 第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();
}
}
因此,这将静态读取11行范围,其中2列从单元格A1开始。
我正在寻找的东西类似于VBA的xlDown或UsedRange。理想情况下,当范围的底部为空白时,这将停止,并允许仍然使用在纸张下方的单元格。
我不确定我是否应该使用Interop.Excel或如何使用它。
任何帮助将不胜感激。非常感谢
答案 0 :(得分:0)
您可以使用C API执行此操作。您需要xlcSelectEnd
功能,该功能可以在其中一个方向上扩展选择范围。所以你打电话给
XlCall.Excel(XlCall.xlcSelectEnd, 4);
方向是:
这意味着您必须设置选择(xlcSelect
),然后对其进行扩展(xlcSelectEnd
),然后获取当前选择(xlfSelection
)。
关于Google群组的讨论也可能有用:https://groups.google.com/group/exceldna/browse_frm/thread/cc87114539c78f53。
所有这些听起来有点复杂,让我觉得你也应该考虑COM API。
答案 1 :(得分:0)
使用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;
}