从Excel中读取列,重新格式化单元格

我目前正在尝试从excel电子表格中读取单元格,而且当我不想要时,它似乎会重新格式化单元格。 我希望它通过计划文本。 我已经阅读了这个问题的几个解决scheme,我已经实现了他们,但我仍然有同样的问题。

读者将数字和数字的date变成date。

例:

2016年1月29日,星期五出来:42398

40.00出来是:2/9/1900 12:00:00 AM

码:

string stringconn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + files[0] + ";Extended Properties=\"Excel 12.0;IMEX=1;HDR=NO;TypeGuessRows=0;ImportMixedTypes=Text\""; try { OleDbConnection conn = new OleDbConnection(stringconn); OleDbDataAdapter da = new OleDbDataAdapter("SELECT * FROM [CUAnswers$]", conn); DataTable dt = new DataTable(); try { printdt(dt); 

我努力了

 IMEX=0; HDR=NO; TypeGuessRows=1; 

这是我打印出来的表格

 public void printdt(DataTable dt) { int counter1 = 0; int counter2 = 0; string temp = ""; foreach (DataRow dataRow in dt.Rows) { foreach (var item in dataRow.ItemArray) { temp += " ["+counter1+"]["+counter2+"]"+ item +", "; counter2++; } counter1++; logger.Debug(temp); temp = ""; counter2 = 0; } } 

除了使用Interop读取Excel电子表格之外,我遇到了类似的问题。 这对我工作:

 var value = (range.Cells[rowCnt, columnCnt] as Range).Value2; string str = value as string; DateTime dt; if (DateTime.TryParse((value ?? "").ToString(), out dt)) { // Use the cell value as a datetime } 

编辑添加新的想法

我将build议将电子表格保存为以逗号分隔的值。 然后Excel将单元格转换为文本。 在C#中parsingCSV很容易。

这导致我想到如何以编程方式进行转换,这是在编程上将xls转换为csv所涵盖的。 也许接受的答案中的代码是你正在寻找的:

 string ExcelFilename = "c:\\ExcelFile.xls"; DataTable worksheets; string connectionString = @"Provider=Microsoft.Jet.OLEDB.4.0;" + @"Data Source=" + ExcelFilename + ";" + @"Extended Properties=""Excel 8.0;HDR=Yes;IMEX=1"""; using (OleDbConnection connection = new OleDbConnection(connectionString)) { connection.Open(); worksheets = connection.GetSchema("Tables"); foreach (DataRow row in worksheets.Rows) { // For Sheets: 0=Table_Catalog,1=Table_Schema,2=Table_Name,3=Table_Type // For Columns: 0=Table_Name, 1=Column_Name, 2=Ordinal_Position string SheetName = (string)row[2]; OleDbCommand command = new OleDbCommand(@"SELECT * FROM [" + SheetName + "]", connection); OleDbDataAdapter oleAdapter = new OleDbDataAdapter(); oleAdapter.SelectCommand = command; DataTable dt = new DataTable(); oleAdapter.FillSchema(dt, SchemaType.Source); oleAdapter.Fill(dt); for (int r = 0; r < dt.Rows.Count; r++) { string type1 = dr[1].GetType().ToString(); string type2 = dr[2].GetType().ToString(); string type3 = dr[3].GetType().ToString(); string type4 = dr[4].GetType().ToString(); string type5 = dr[5].GetType().ToString(); string type6 = dr[6].GetType().ToString(); string type7 = dr[7].GetType().ToString(); } } }