当我使用MS JET驱动程序从工作簿中读取时,我会遇到一些奇怪的行为。我在工作簿中的主工作表上有三列数值数据,最后一列最初用连字符(-
)替换了一些数值。当我将数据读入.NET DataTable时,我注意到该列中的所有数值都是使用为该单元格定义的格式而不是实际的基础值读取的。
EG。我得到1.79而不是1.78565,因为该格式被格式化为2DP。
如果我删除连字符以便单元格为空,我仍然会遇到同样的问题。可能正确读取工作表中的另外两列,因为它们从未粘贴在连字符中,所以我假设它在工作表上存在某些我不知道的格式问题。
现在我发现的奇怪行为是当我在我的机器上打开工作簿并尝试再次读取该文件时,它似乎会读取基础(正确)值。
任何可能导致此问题的想法?
以下是有问题的代码:
$connectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=`"$inputFilePath`";Extended Properties=`"Excel 12.0;HDR=YES;IMEX=1`";"
$conn = New-Object System.Data.OleDb.OleDbConnection($connectionString)
$conn.open()
[System.Data.DataTable] $dtOutput = New-Object System.Data.DataTable
[System.Data.DataTable] $dtReturns = New-Object System.Data.DataTable
[void]$dtOutput.Columns.Add("EntityId")
[void]$dtOutput.Columns.Add("Date")
[void]$dtOutput.Columns.Add("ReturnValue")
$sql = "SELECT * FROM [Sheet1$]"
$cmdReturns = New-Object System.Data.OleDb.OleDbCommand($sql, $conn)
$daReturns = New-Object system.Data.OleDb.OleDbDataAdapter($cmdReturns)
[void]$daReturns.Fill($dtReturns)
$dtReturns
是填充的DataTable,其中包含值。