Tag: oledb

使用OleDbConnection :: GetOleDbSchemaTable()列出Excel表

以下PowerShell代码片段将通过OleDbConnection.GetOleDbSchemaTable()列出Excel电子表格中的所有工作表和命名范围: $file = "C:\Users\zippy\Documents\Foo.xlsx"; $cnStr = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=`"$($file)`";Extended Properties=`"Excel 12.0 Xml;HDR=YES`";"; $cn = New-Object System.Data.OleDb.OleDbConnection $cnStr; $cn.Open(); # to list the sheets $worksheets = $cn.GetOleDbSchemaTable([System.Data.OleDb.OleDbSchemaGuid]::Tables,$null); $cn.Close(); $cn.Dispose(); $worksheets | Format-List; 但是,这不会列出表(在Excel 2003中称为列表)或引用列表的命名范围。 如果我传递一个types为“程序”或“视图”的OleDbSchemaGuid , Operation is not supported for this type of object. MethodInvocationException ,并且Operation is not supported for this type of object.消息Operation is not […]

使用oledb从Excel中读取公式

我正在使用C#.net(4.0),并试图通过将我的参数放入一个Excel文件来计算一些结果。 这个excel文件已经得到了所需的公式。 例如,当我在单元格A1,A2和A3中input我的参数时,计算结果值并显示在单元格a4中。 单元格a4具有使用来自a1,a2和a3的值的公式。 我可以使用oledb provider(v4.0)轻松连接到这个excel文件,然后我也可以设置a1,a2和a3的单元格值。 结果出现在单元格a4(我打开excel文件来检查)。 但唯一的问题是,当我读取单元格a4的值时,它不会按原样返回。 在a4中计算的值:6.67%我在同一个单元的.net代码中得到的值:0.092323323211 …(像这样) 作为一种解决scheme,我试图将a3的“值”部分复制到其他单元格中(如b3 = VALUE(a3)),并尝试读取b3。 但是我得到同样的结果。 有没有解决这个问题? 我是否错过了这里特定于制定的细胞? 还是MS oledb的错误? 感谢您的任何投入….

读取Excel:列名称被截断为前64个字符

我正在尝试通过.NET(C#)阅读Excel电子表格 以下是我使用的连接string: Provider=Microsoft.Jet.OLEDB.4.0; Data Source=C:\Windows\TEMP\96e7a8b720b642388d9dbbca49537678.xls; Extended Properties="Excel 8.0;HDR=Yes;IMEX=1;TypeGuessRows=0;ImportMixedTypes=Text"; 当我看一下模式使用: using (var conn = new OleDbConnection(connStr)) { conn.Open(); result[OleDbSchemaGuid.Tables] = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null); result[OleDbSchemaGuid.Columns] = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Columns, null); result[OleDbSchemaGuid.Tables_Info] = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables_Info, null); conn.Close(); } 在result[OleDbSchemaGuid.Columns] ,所有列名都被截断为前64个字符。 我需要所有列的全名。 任何想法解决这个问题? 非常感谢查看这个问题。

OleDbConnection在任何打开的Excel窗口中以只读方式打开工作表

这是非常确切的问题: OleDbConnection()在任何打开的Excel窗口中打开一个Excel文件。 但是,如果没有一个窗口打开 ,但没有答案。 如果我有多个Excel窗口打开,我的程序将在任何Excel窗口中打开一个只读表。 即如果我打开Test.xlsx,并在另一个窗口中的空白表(假设我的程序要写入Test.xlsx); 当我做: OleDbConnection myConn = new OleDbConnection(conn); myConn.Open(); Test.xlsx的只读副本将在空白窗口中打开,程序将对此进行操作。 有没有办法确保myConn使用已经打开的Test.xlsx? 如果有帮助,我的connvariables是: “Provider = Microsoft.Jet.OLEDB.4.0; Data Source = C:\ temp \ Test.xlsx; Extended Properties =”Excel 8.0; HDR = No“”

间歇性问题 – OleDbConnection.Open()抛出System.Data.OleDb.OleDbException:未指定的错误

我们组织中的生产应用程序使用Excel 2003文件通过Web应用程序处理用户提交的数据。 这个应用程序在大多数情况下都可靠运行 最近,当调用OleDbConnection.Open()方法时,应用程序开始间歇性地抛出“System.Data.OleDb.OleDbException:Unspecified error”。 错误会一直持续到应用程序池被回收为止,届时所有的function都将如预期的那样运行。 在Windows应用程序事件日志中没有捕获错误。 ASP.NET Web应用程序位于Windows Server 2003 32位计算机上的WSS 3.0中的Web部件中。 该应用程序旨在防止任何并发问题。 系统functionID是唯一可以访问临时文件存储的帐户,并且内置了一些机制以确保文件在使用唯一命名约定和上载跟踪子系统进行处理期间不会被另一个上载覆盖。 任何有识之士将不胜感激。 我们正在使用以下代码从Excel 2003文件中检索数据: public static DataTable GetWorksheetData(string filePath) { OleDbConnectionStringBuilder builder = new OleDbConnectionStringBuilder { DataSource = filePath }; builder.Provider = "Microsoft.Jet.OLEDB.4.0"; builder["Extended Properties"] = "Excel 8.0;IMEX=1;HDR=YES"; DataTable table = new DataTable(); try { // Creates an OleDbConnection for the […]

是否可以使用OLEDB插入一个公式?

我已经成功创build了一个使用OLEDB的Excel文件(在第一次创build表格/表格之后)。 我想插入一个公式,总结一个成本(货币)单元格,但一直没有find任何技术这样做。 我已经尝试将公式插入成本字段如下,但收到无效的数据types错误,这是可以理解的: cmd.Parameters.Add("P0", OleDbType.PropVariant).Value = "=SUM(K2:K5)" cmd.CommandText = "INSERT INTO [" & ExcelTableName & "] (Cost) VALUES(P0);" cmd.ExecuteNonQuery() 有没有办法使用OLEDB这样做,还是我需要使用自动化?

Oledb跳过Excel文件的第一列。 第一列是空的

问题是第一列是空的,它不能被读取。 要阅读这个文件,我写了下面的代码: MyConnection = new OleDbConnection("provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + "'" + filename + "'" + ";Extended Properties=\"Excel 8.0;IMEX=1;HDR=NO;TypeGuessRows=0\""); DtSet = new DataSet(); MyConnection.Open(); var dt = MyConnection.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null); MyCommand = new OleDbDataAdapter("select * from [$first]", MyConnection); MyCommand.Fill(DtSet); // filldata dataExcel.AddRange(fillData(DtSet.Tables["Table"]).Select(info => info.ToList())); } List<List<string>> fillData(DataTable DtSet) //reader { List<List<string>> data = new List<List<string>>(); foreach (DataRow item […]

Excel OLE DB在后台打开表单 – 如何防止?

我在Excel 2010中,使用“数据 – 从其他来源”向导从另一个工作表导入数据。 我以只读方式打开工作表,并且即使其他人已经打开我正在导入的工作表,也会导入数据。 但是,如果其他人已经打开了该表,那么我的导入将在Excel窗口中启动我的表的新Readonly实例。 而且,即使在导入数据之后,Excel的其他实例仍然存在。 (如果工作表尚未被其他人打开,则不会发生这种情况 – 在这种情况下,我的数据连接向导只会吸引数据)。 我怎样才能使它不能在后台打开该表单? 这是我的连接string – 请注意,它是只读的。 Provider=Microsoft.ACE.OLEDB.12.0;User ID=Admin;Data Source=H:\Departments\RMBS\REIT Model\Reit Portfolio 2013-6-28.xlsx;Mode=Share Deny None;Extended Properties="EXCEL 8.0;ReadOnly=true";Jet OLEDB:System database="";Jet OLEDB:Registry Path="";Jet OLEDB:Engine Type=35;Jet OLEDB:Database Locking Mode=0;Jet OLEDB:Global Partial Bulk Ops=2;Jet OLEDB:Global Bulk Transactions=1;Jet OLEDB:New Database Password="";Jet OLEDB:Create System Database=False;Jet OLEDB:Encrypt Database=False;Jet OLEDB:Don't Copy Locale on Compact=False;Jet OLEDB:Compact Without […]

在C#中使用OleDbConnection读取xlsx文件会引发错误

我编写了一个控制台应用程序,使用OleDbConnection在C#中读取xlsx文件。 它会抛出以下错误 Microsoft.ACE.OLEDB.12.0“提供程序未在本地计算机上注册。 以下是我写的代码 string connString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=E:\Suganya\ColumnReport.xlsx;Extended Properties=Excel 12.0;"; OleDbConnection objConn = new OleDbConnection(); OleDbDataAdapter dataAdapter = new OleDbDataAdapter(); objConn = new OleDbConnection(connString); string Query = "SELECT * FROM [Sheet1$]"; OleDbCommand objCmd = new OleDbCommand(Query, objConn); DataTable Table = new DataTable(); dataAdapter.SelectCommand = objCmd; dataAdapter.Fill(Table); 我已经执行了以下的事情来解决这个问题。 我安装了AccessDatabaseEngine.exe (32位),发现ACEOLEDB.dll存在于以下pathC:\Program Files (x86)\Common Files\microsoft shared\OFFICE14 尝试引用应用程序中的ACEOLEDB.dll […]

在Excel工作表名称中使用散列符号(#)

我试图解决我在尝试使用OLE DB读取Excel文件时遇到的问题。 我发现问题是因为表名中有一个散列标记(#) 。 不幸的是,我不能重命名表。 所以经过一些尝试,我已经成功地通过添加引号(')来阅读完整的工作表: 之前 Select * from [" + sheetName + "$]; (工作)后 Select * from ['" + sheetName + "$']; 但是,当我试图从OLE DB特性中读取一个范围时,我就陷入了困境: Select * from [" + sheetName + "$" + fromCell + ":" + toCell + "]; 当我尝试发送这个命令时,它似乎被#replace为. 然后它找不到该表。 我已经尝试了很多组合和转义代码,并没有find任何解决scheme。 我怎样才能访问这个文件?