Tag: oledb

OLEDB,写Excel单元没有领先撇号

我正在使用OLEDB(C#)写入Excel文件。 我需要的只是RAW数据格式。 我注意到所有单元格(标题和值)的前缀撇号(') 这是一种避免在所有文本单元格中添加它们的方法吗? 这是我的连接string: string connectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + filePath + ";Extended Properties='Excel 8.0;HDR=Yes'"; 我试过使用IMEX = 1像这样: string connectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + filePath + ";Extended Properties=\"Excel 8.0;HDR=Yes;IMEX=1\""; 但之后,我收到以下错误: Microsoft Jet数据库引擎找不到对象'C:\ Temp \ New Folder \ MF_2009_04_19_2008-11-182009_DMBHCSAM1118.xls'。 确保对象存在,并且正确拼写其名称和path名称。 最后我试过使用IMEX = 0像这样: string connectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + filePath + ";Extended Properties=\"Excel 8.0;HDR=Yes;IMEX=0\""; 这一次没有提出任何豁免。 […]

Excel单元格格式问题

我正在使用OleDB DataReader从我的Excel文件中获取数据(但是这个问题也发生在DataTable.Fill中)。 问题是我有一个应该返回string的列。 一切都很好,但最近,一个问题出现了,因为列的单元格有不同的格式。 一些在数字和其他文字。 当我使用dataReader.GetSchema()检查它显示有问题的列被推断为typesSystem.String。 这个问题是,所有的非文本单元立即被设置为空。 有没有办法build议读者,该列应该只parsing列为System.Object而不是推断它为System.String和转储所有非string单元格? 我正在使用的连接string是: stringconnString =“提供程序= Microsoft.Jet.OLEDB.4.0;” +“Data Source =”+ filePath +“;” +“扩展属性= Excel 8.0;”; 代码是: using ( OleDbConnection connection = new OleDbConnection( connString ) ) { connection.Open(); foreach ( string worksheetName in worksheetNames ) { using ( OleDbCommand command = new OleDbCommand( "SELECT * FROM [" + worksheetName + […]

在.Net中从Excel导入时的科学记数法

我有一个C#/ .net作业,从Excel导入数据,然后处理它。 我们的客户端删除文件,我们处理它们(重要的,因为我没有任何控制原始文件)。 我使用OleDb库来填充一个数据集(我讨厌编写这个代码,严重的是,有没有一个.Net开发人员可以编写更多的代码?)。 该文件包含一些数字,如30829300,30071500等…这些列的数据types是“文本”。 这些数字在我导入数据时转换为科学记数法。 无论如何要防止这种情况发生? -克里斯

Jet引擎 – 255个字符截断

我需要将Excel电子表格导入到我的程序中,并具有以下代码: string connectionString = String.Format(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0};Extended Properties=""Excel 8.0;IMEX=1;HDR=NO;""", MyExcelFile.xls); command.CommandText = "SELECT * FROM [Sheet1$]"; (注意,上面的代码不是真正的代码,但应该让你看看我在做什么) 我正在获取导入的文件,唯一的问题是Excel表中超过255个字符被截断的任何列。 有没有办法解决这个问题呢? 我在某处读到,如果你确定前面8行的列中有一长串文本,那么它将被视为一个备忘录字段,因此不会被截断,但似乎不起作用。 有任何想法吗? 格雷姆

在不修改registry项的情况下读取Excel InterMixed DataType

我想用C#来读取混合数据types的Excel文件。 以下是我的连接string var path = //xls location var MyConnection = new OleDbConnection("provider=Microsoft.Jet.OLEDB.4.0; Data Source='" + path + "';Extended Properties='Excel 8.0;IMEX=1;'"); 研究告诉我连接string中的完整Extended Properties应该是 Excel 8.0;IMEX=1;HDR=NO;TypeGuessRows=0;ImportMixedTypes=Text 但是,我被告知在连接string中, TypeGuessRows=0 没有意义,因为这个值将直接从registry中获取 。 因此,我需要手动修改密钥,并从连接string中删除此属性。 涉及的特定registry项是: path: HKEY_LOCAL_MACHINE \ SOFTWARE \微软\喷气\ 4.0 \发动机\ EXCEL 键: TypeGuessRows 原始值= 8 ,以使其工作变为= 0 没有这样做IMEX将无法正常工作,我将TypeGuessRows=0添加到Extended Properties 。 但是,我公司禁止修改registry值(严格)。 我被告知要find替代品。 简而言之: 有没有一种方法来读取混合的数据types的Excel文件, 而不必修改任何registry项 (这是相当普遍的做法)? 进一步话题: 你以前经历过这个吗? […]

使用C#.NET查询Excel电子表格而不使用Jet OLE DB

有没有办法查询Excel 2010电子表格,而不使用Jet或导出为CSV和查询CSV文件。 我无法使用Jet的原因是因为应用程序需要在Windows Server 2008 R2上作为Web服务运行,而不支持32位 – 因此Jet将无法工作。 这是给定的,因为WOW 64没有安装在目标服务器上。 这个线程build议使用32位代理机器,但这也不是一个选项。 更多信息:服务器正在运行Sharepoint 2010。 谢谢, JD

如何在Excel中使用OLEDB获得只有excel工作表名称的列表; 过滤出在元数据中显示的非工作表

我有一个使用OLEDB从Excel电子表格中获取工作表名称的问题。 问题是,当我使用GetOleDbSchemaTable时,生成的DataTable不仅仅是实际的工作表名称; 它有额外的“表”,我只能假设由Excel内部使用的行。 例如,如果我有一个名为myWorksheet的工作表,下面的代码最终可能会包含一个包含myWorksheet $,myWorksheet $ PrintTable和myWorksheet $ _的列表。 只有第一个myWorksheet $logging是实际的工作表。 其他人只是垃圾,我不需要。 在元数据中查看它们时,它们看起来就像常规表一样,即使使用TABLEtypes也是如此。 现在我只是用名字“$ _”或者“$ Print”手动过滤掉了所有的东西,但是谁知道Excel的其他function可能会使这些额外的logging以不同的格式出现。 有谁知道只有实际的工作表名称的最佳方式,而不是这些不是工作表的内部表? 元数据中是否有东西可以区分它们? private ArrayList getXlsWorksheetNames(OleDb.OleDbConnection conn) { ArrayList wsList = new ArrayList(); DataTable schemaTable; try { conn.Open(); schemaTable = conn.GetOleDbSchemaTable(OleDb.OleDbSchemaGuid.Tables, null); foreach (DataRow row in schemaTable.Rows) { //form.appendToResultsTxt("Adding worksheet to list: " + Environment.NewLine + // "Name = " […]

从IIS上的Excel文件中读取有限的行

我有一个在IIS上托pipe的asp.net mvc应用程序。 我有一个用户上传包含50k +行的excel文件的表单。 我用下面的C#代码读取了excel文件。 public DataTable GetExcelDataTable(string fileName) { string connectionString = Path.GetExtension(fileName) == "xls" ? string.Format("Provider=Microsoft.Jet.OLEDB.4.0;Data source={0}; Extended Properties=Excel 8.0;", fileName) : string.Format("Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0}; Extended Properties=Excel 12.0;", fileName); var conn = new OleDbConnection(connectionString); using (var adapter = new OleDbDataAdapter("SELECT * FROM [Sheet1$]", conn)) { var ds = new DataSet(); adapter.Fill(ds); DataTable data = […]

用OLEDB写入excel文件

有谁知道如何通过在C#中的OLEDB写入Excel文件(.xls)? 我正在做以下事情: OleDbCommand dbCmd = new OleDbCommand("CREATE TABLE [test$] (…)", connection); dbCmd.CommandTimeout = mTimeout; results = dbCmd.ExecuteNonQuery(); 但是我得到一个OleDbException抛出的消息: “不能修改表'test $'的devise,它是在一个只读数据库中。” 我的连接看起来不错,我可以select数据正常,但我似乎无法插入数据到Excel文件,有没有人知道我如何获得通过OLEDB的Excel文件的读/写访问?

EXCEL中与Microsoft OLE DB提供程序的Jet 4.0的SQL中的任何参考/手册?

EXCEL中是否有与Microsoft OLE DB Provider for Jet 4.0连接的SQL语法参考手册? 例如,我该如何编写datetypes的常量? 什么关键字/函数/子句可用?