You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将OpenXML读取指定Sheet的C#代码转换为可用VB.NET代码?

解决VB.NET中OpenXML读取指定Sheet的Linq语法问题

你遇到的问题核心是VB.NET和C#的Linq Lambda表达式语法差异,加上比较表达式写错了,才导致"sht未声明"的错误。咱们一步一步修正:

错误点分析

  1. Lambda表达式语法错误:C#里用=>定义的匿名委托,在VB.NET里必须用Function(参数)来显式声明;
  2. 比较表达式逻辑混乱:你写的sht >= sht.Name = "COMMON"完全不符合语法逻辑,正确的应该是判断Sheet的Name属性等于"COMMON";
  3. (可选优化)变量命名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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.06 18:22:37