【发布时间】:2018-09-22 11:45:30
【问题描述】:
大家好!我真的是 Visual Basic 和 Excel 的新手,所以我不知道是否有更好的方法来做我想做的事情,但这并不重要。
我正在尝试使用一些边框和类似的东西设置格式化我的 excel 单元格的范围。我不知道如何找到最后使用的单元格,所以我想出了这个。
range = "A1:AD1"
For Each dataRow In dataTable.Rows
rowIndex += 1
Next
我从我的 数据表 创建了 excel 表,因此它们具有相同的列和行。我的 范围 是较早计算的,这取决于我的 excel 表中有多少列(数据表/excel 列可能会根据用户输入而变化)
在计算完数据表中的每一行后,我这样做了:
range = range.Substring(0, range.Length() - 1) & Convert.ToString(rowIndex)
最后一行的结果是“A1:AD413”。我在我的 excel 上检查了它,最后使用的单元格正是 AD413
现在,当我尝试在我的范围内应用我的样式时,excel 会抛出 HRESULT: 0x800A03ECexception,我知道这类似于 “超出范围异常”。为什么excel会抛出它?我该如何解决?范围没有错!
excel 抛出异常的行
wSheet.Cells(range).VerticalAlignment = Microsoft.Office.Interop.Excel.XlVAlign.xlVAlignCenter
我的代码
rowIndex = 0
For Each dr In dt.Rows
rowIndex += 1
Next
range = range.Substring(0, range.Length() - 1) & Convert.ToString(rowIndex + 1)
wSheet.Cells(range).VerticalAlignment = Microsoft.Office.Interop.Excel.XlVAlign.xlVAlignCenter
wSheet.Cells(range).HorizontalAlignment = Microsoft.Office.Interop.Excel.XlHAlign.xlHAlignLeft
wSheet.Cells(range).Borders.LineStyle = Microsoft.Office.Interop.Excel.XlLineStyle.xlContinuous
【问题讨论】:
-
如果您要查找写入的单元格的范围,Excel 工作表有一个名为 UsedRange() 的属性,它将为您提供其中包含值的所有单元格,即
wSheet.UsedRange.VerticalAlignment = ...。至于为什么会出现错误,您检查过range中的值吗?在接下来的几行尝试使用它之前,我很想知道它持有什么字符串 -
Cells属性采用 (rowNumber, columnNumber) 参数,如 Cells(1,1) 而不是 Cells("A1:B2")。在wSheet对象上使用Range属性。 -
@TnTinMn
Cells(range)在将range字符串修改为"A1:AD413"之前完美运行 -
@soohoonigan
range在range = range.Substring(0, range.Length() - 1) & Convert.ToString(rowIndex + 1)之前持有字符串"A1:AD1" -
@soohoonigan 使用 UsedRange btw 解决。但谜团仍在:o