如何将OpenXML读取指定Sheet的C#代码转换为可用VB.NET代码?
解决VB.NET中OpenXML读取指定Sheet的Linq语法问题
你遇到的问题核心是VB.NET和C#的Linq Lambda表达式语法差异,加上比较表达式写错了,才导致"sht未声明"的错误。咱们一步一步修正:
错误点分析
- Lambda表达式语法错误:C#里用
=>定义的匿名委托,在VB.NET里必须用Function(参数)来显式声明; - 比较表达式逻辑混乱:你写的
sht >= sht.Name = "COMMON"完全不符合语法逻辑,正确的应该是判断Sheet的Name属性等于"COMMON"; - (可选优化)变量命名
Sheets容易产生歧义,因为你要找的是单个Sheet,改成targetSheet更清晰。
修正后的完整VB.NET代码
Using spreadsheetDocument As SpreadsheetDocument = SpreadsheetDocument.Open(Dts.Variables("stFlatFileConnString").Value.ToString(), False) Dim bkPart As WorkbookPart = spreadsheetDocument.WorkbookPart Dim bkworkbook As Workbook = bkPart.Workbook ' 正确的Linq查询:用Function(sht)定义Lambda,判断Name等于"COMMON" Dim targetSheet As Sheet = bkworkbook.Descendants(Of Sheet)().FirstOrDefault(Function(sht) sht.Name = "COMMON") ' 建议添加空值判断,避免后续操作出现空引用异常 If targetSheet IsNot Nothing Then ' 示例:获取对应的WorksheetPart进行后续操作 Dim worksheetPart As WorksheetPart = CType(bkPart.GetPartById(targetSheet.Id), WorksheetPart) Dim worksheet As Worksheet = worksheetPart.Worksheet ' ... 这里写你需要的业务逻辑 End If End Using
关键说明
- VB.NET的Linq在处理筛选逻辑时,必须用
Function(参数)来定义返回布尔值的匿名函数,这和C#的隐式箭头语法是对应的; - 添加
If targetSheet IsNot Nothing的判断是个好习惯,避免当找不到名为"COMMON"的Sheet时触发空引用错误,和C#里if(targetSheet != null)的作用一致。
内容的提问来源于stack exchange,提问作者FlyFish
相关产品推荐
相关产品推荐

