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

VB.Net中使用OleDbDataAdapter如何提取Excel区域设置以正确解析日期?

你之前的方法获取的是当前运行环境的区域配置,而非Excel文件本身内置的区域设置,因此返回值固定。以下是可行的解决方案:

方案1:调整OLEDB连接参数适配日期解析逻辑

  • 你可以在连接字符串的Extended Properties中添加Locale Identifier参数指定Excel文件对应的区域LCID,比如中国区是2052,美国区是1033,示例连接字符串修改如下:
Dim connectionString As String = String.Format("Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Extended Properties=""Excel 12.0;HDR={1};IMEX=1;Locale Identifier=2052""", _filePath, fileHasHeader)
  • 如果不知道文件对应区域,可在读取日期值后先按两种常见格式(月/日/年、日/月/年)做合法性校验,比如日期值月份大于12的自动切换解析顺序。

方案2:使用EPPlus读取Excel内置区域与单元格格式(推荐,无需安装Excel)

EPPlus可以直接读取xlsx格式Excel文件内置的Culture属性和单个单元格的日期格式规则,示例代码:

' 先安装EPPlus NuGet包
Using package As New ExcelPackage(New FileInfo(_filePath))
    Dim workBook As ExcelWorkbook = package.Workbook
    ' 获取工作簿内置区域设置
    Dim excelCulture As CultureInfo = workBook.Styles.NumberFormats.Culture
    ' 输出日期格式规则
    Dim shortDatePattern As String = excelCulture.DateTimeFormat.ShortDatePattern
    ' 读取指定单元格的日期值,自动适配格式
    Dim sheet As ExcelWorksheet = workBook.Worksheets(1)
    Dim cellDateValue As DateTime = sheet.Cells("A1").GetValue(Of DateTime)()
End Using

如果是旧版xls格式,可改用NPOI库实现相同逻辑

方案3:使用Excel Interop读取工作簿区域(需本地安装Excel)

如果运行环境允许安装Excel,可通过Interop接口直接获取工作簿的区域配置:

Dim excelApp As New Microsoft.Office.Interop.Excel.Application()
Dim workBook As Microsoft.Office.Interop.Excel.Workbook = excelApp.Workbooks.Open(_filePath)
' 获取工作簿的区域LCID
Dim lcid As Integer = workBook.LanguageSettings.LanguageID(Microsoft.Office.Core.MsoAppLanguageID.msoLanguageIDUI)
Dim excelCulture As New CultureInfo(lcid)
Dim shortDatePattern As String = excelCulture.DateTimeFormat.ShortDatePattern
workBook.Close()
excelApp.Quit()

内容的提问来源于stack exchange,提问作者Tolis Bov

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.10 18:00:00