使用.NET从Excel中获取数据作为数据库
我想使用.NET从Excel文件中获取数据正在使用Excel文件,所以我无法打开它。 我所做的是使用OleDB作为数据源连接到它。
问题是我得到一个单元格的数据,但不是它的风格。 Excel中的date值在.NET中变为date时间格式,而在Excel中设置为货币的单元格在.NET中显示为整数。 使用OleDB从Excel中导出数据时,您不知道单元格是否包含date,货币等。例如,如果单元格设置为文本并包含从零开始的五位数字,则只会获得四位数字。
我正在寻找一种方法来获取数据,因为它会出现,如果你要在Excel中查看数据。
使用.NET 3.5和Excel 2007。
请参见:
- 从C#读取Excel文件
- 推荐一个教程来读取C#中的Excel文件
- 如何读取使用C#的Excel文件的数据?
- .net c#中excel中读取数据的build议
- C#2.0parsingExcel电子表格的最快方法
为了找出列的数据types,你必须使用FillSchema方法:
OleDbConnection conn = new OleDbConnection(...); conn.Open(); DataSet dataSet = new DataSet(); OleDbDataAdapter dataAdapter = new OleDbDataAdapter("SELECT * FROM <table>", conn); dataAdapter.FillSchema(dataSet, SchemaType.Source); dataAdapter.Fill(dataSet); //Now you can access the data type like this dataSet.Tables[0].Columns[0].DataType
SpreadsheetGear for .NET可以打开Excel 2007 xlsx工作簿,而Excel 2007打开工作簿。
Excel将date,时间,货币,数字等存储为数字(C#双打)。 数字格式通知Excel如何显示数字。 Excel和SpreadsheetGear有一个属性来返回格式化的文本 – Excel中的Range.Text和SpreadsheetGear中的IRange.Text。
SpreadsheetGear也有一个属性,告诉你一个单元格的数字格式的types,所以你可以确定单元格是否被格式化为date,货币等…如果这对你的应用程序很重要。 有关更多信息,请参阅IRange.NumberFormatType属性。
如果您想试用,可以在这里下载免费试用版。
免责声明:我自己的SpreadsheetGear LLC
要连接到一个excel文件,你需要适当的连接string:
string connString = @"Provider=Microsoft.ACE.OLEDB.12.0; Data Source=<YourExcelPath>;Extended Properties=\"Excel 12.0;HDR=YES;\"";
使用OleDb类来查询文件中的信息之后:
string selectCmd = "SELECT * FROM <SheetName>"; using(OleDbConnection excelConn = new OleDbConnection(connString)) { excelConn.Open(); OleDbCommand command = new OleDbCommand(selectCmd, excelConn); OleDbDataAdapter da = new OleDbDataAdapter(command); DataTable sheetInfo = new DataTable(); dataAdapter.Fill(sheetInfo); //Do something with the data. }
因此,您需要用Excel文件的pathreplace“YourExcelPath”,将“SheetName”replace为要检索数据的工作表的名称。
它不是很漂亮,但是你可以在Excel应用程序上使用COM Interop来读取表单。
这将允许你访问任何你喜欢的单元格,但是更容易出错。
System.Reflection.Missing ms = System.Reflection.Missing.Value; Microsoft.Office.Interop.Excel.Application xlApp = new Microsoft.Office.Interop.Excel.Application(); xlApp.Visible = true; Microsoft.Office.Interop.Excel.Workbook xlBook = xlApp.Workbooks.Open(@"C:\Demo.xlsx", ms, ms, ms, ms, ms, ms, ms, ms, ms, ms, ms, ms, ms, ms); Microsoft.Office.Interop.Excel.Worksheet xlSheet = xlBook.Sheets[1] as Microsoft.Office.Interop.Excel.Worksheet; Microsoft.Office.Interop.Excel.Range rng = xlSheet.Cells[1, 1] as Microsoft.Office.Interop.Excel.Range; System.Console.WriteLine(String.Format("{0} {1} {2}", rng.Value2, rng.Text, rng.NumberFormat)); xlBook.Close(false, ms, ms); xlApp.Quit(); System.Console.ReadLine();