使用.NET从Excel中获取数据作为数据库
我想从使用.NET的Excel文件中获取数据 正在使用Excel文件,因此无法打开它。我所做的就是使用OleDB作为数据源连接到它。使用.NET从Excel中获取数据作为数据库
问题是我得到一个单元格的数据,但没有它的样式。 Excel中的日期值在.NET中变为日期时间格式,而在Excel中设置为货币的单元格在.NET中显示为整数。使用OleDB从Excel导出数据时,您不知道单元格是否包含日期,货币等。例如,如果单元格设置为文本并包含从零开始的五位数字,则只会获得四位数字。
我正在寻找一种方法来获取数据,因为它会出现,如果你要在Excel中查看数据。
使用.NET 3.5和Excel 2007
要连接到一个Excel文件,就需要相应的连接字符串:
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.
}
所以,你需要替换“ YourExcelPath“与您的Excel文件的路径和”SheetName“与您想要检索数据的工作表的名称。
可以打开Excel 2007 xlsx工作簿,而Excel 2007打开工作簿。
Excel将日期,时间,货币,数字等存储为数字(C#双打)。数字格式通知Excel如何显示数字。 Excel和SpreadsheetGear有一个属性来返回格式化文本 - Excel中的Range.Text和SpreadsheetGear中的IRange.Text。
SpreadsheetGear还具有一个属性,它告诉您单元格的数字格式的类型,以便您可以确定单元格是格式化为日期,货币等等......如果这对您的应用程序很重要。有关更多信息,请参阅IRange.NumberFormatType属性。
,如果你想尝试一下,你可以下载一个免费试用here。
声明:我自己的SpreadsheetGear LLC
谢谢乔。我一定会给你的产品一个尝试,并会报告回来。 – idophir 2009-09-18 19:16:17
它不是很漂亮,但你可以使用COM互操作到Excel应用程序读入纸。
这将允许您访问任何您喜欢的单元格,但更容易出错。
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();
问题是要求一种方法来确定使用OLEDB的单元格格式,而不是如何使用其他方法(如com interop)。 – 2010-12-19 22:17:02
为了找出列的数据类型,你必须使用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
这回答了这个问题。 – 2010-12-19 22:17:18
谢谢,但这些都不解决我的问题。我知道如何使用OleDB连接到Excel,但我得到的数据是不完整的,因为我不知道每个单元格的格式类型。 – idophir 2009-09-16 13:09:10
OP确实要求确定单元格格式(指问题中的样式),而不是如何通过OLEDB进行连接。虽然如果你阅读米奇提供的4个链接,这也会给你答案。 – 2010-12-19 22:15:55