vb.net - 如何在没有索引号或列字母的广泛硬编码的情况下引用 Excel 范围
问题描述
我是一个未经训练的业余程序员。我正在编写一些操作 Excel 电子表格的 vb.net 代码。为了使我的代码更易于维护,我不想像 Microsoft(等)示例所示的那样在所有地方硬编码单元格引用/列索引,如下所示:
.Cells(1,1)
.Range("A1")
我宁愿创建某种定义,我可以用它来做这样的事情:
.Cells(row, ExportedSalesSheet.PURCHASE_ORDER_COLUMN)
然后,如果独立系统生成的电子表格发生变化,我可以在一个地方更改值。
我尝试过使用带有公共常量的类(参见上面的示例),但这似乎变得非常难看,因为有时 com 对象似乎需要一个字符串,例如“A:A”、“A1”来引用列或单元格; 其他时候它需要一个索引号,其他时候它需要行和列索引号。
我想要一些易于准备的东西,也可以让我根据需要轻松返回索引或信件。也许是这样的?
ExportedSalesSheet.columns.purchase_order.index
ExportedSalesSheet.columns.purchase_order.letter
ExportedSalesSheet.cells.header_text.row.index
ExportedSalesSheet.cells.header_text.column.letter
ExportedSalesSheet.cells.header_text.column.index
我不知道如何创建这样的对象,也不知道这个概念是否遵循最佳实践。也许有更好的方法。
任何建议将不胜感激。
解决方案
该解决方案涉及使用“嵌套类”(在阅读此线程之前我不知道的东西,构建常量层次结构(访问 2020-11-18)
Public Class ExportedSalesSheet
Class Columns
Class Service
Public Const Heading As String = "Description"
Public Const Index As Integer = 5
Public Const Letter As String = "E"
End Class
Class Comments
Public Const Heading As String = "Comments"
Public Const Index As Integer = 2
Public Const Letter As String = "B"
End Class
Class Fee
Public Const Heading As String = "Fee"
Public Const Index As Integer = 7
Public Const Letter As String = "G"
End Class
End Class
End Class
虽然不是我过去一直使用 DEFINED_CONSTANTS 的传统方式,但这种方法为您提供了 IntelliSense 的帮助,并保留了易于编码、易于阅读和易于更新原始数据的层次结构。这是一个例子
Dim serviceDescription As String = vbNullString & _
.Cells(currentRow, ExportedSalesSheet.Columns.Service.Index).Value
推荐阅读
- r - 如何在 R 中重现以下涉及 for 循环的 matlab 代码?
- php - 过滤 Laravel 资源集合有没有更好的方法
- cordova - 如何修复 Phonegap 中的“FCMPlugin Ready ERROR”?
- r - 如何在 dplyr 中改变 for 循环
- pandas - Pandas 不会将 EIA API 数据拆分为两个不同的列以便于访问
- python - 如何在 Python 3.7 中向 bytearray 添加字节?
- php - 在 PHP 表单中选中取消选中
- c# - 如何使用其他值从字典中获取值
- reactjs - 回调阻止 setState
- javascript - 如何获取滑块范围值并将其存储在 JavaScript 中的变量中