以文本forms阅读excel列

我只想从Web应用程序中的Excel文件中读取所有列作为文本值,而不考虑数据的types(date,编号等)。

请查看使用的连接string。 只有安装了ACE驱动程序,我们不能在生产服务器上使用任何其他驱动程序。

Provider=Microsoft.ACE.OLEDB.12.0;Data Source=c:\myFolder\myOldExcelFile.xls; Extended Properties="Excel 12.0;HDR=YES;IMEX=1"; 

设置IMEX=1不起作用。 它为某些值返回null。

我可以看到很多文章,但是看不到正确的答案。

任何帮助,将不胜感激。

我认为在ACE解决之后,这就是你所要做的

不幸的是,您不能从连接string中设置ImportMixedTypes或TypeGuessRows,因为这些设置是在registry中定义的。 对于ACE OleDb驱动程序,它们存储在

HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Office \ 14.0 \ Access Connectivity Engine \ Engines \ Excel

在registry中。 所以,你可以简化你的连接string来摆脱一些扩展属性。

一旦您在TypeGuessRows中将TypeGuessRows设置为0并将ImportMixedTypes为Text,您应该会获得您期望的行为。


或者您可以使用Microsoft.Office.Interop.Excel来读取文件。 示例代码:

 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using Excel = Microsoft.Office.Interop.Excel; namespace ExcelTut { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { Excel.Application xlApp = new Excel.Application(); Excel.Workbook xlWorkbook = xlApp.Workbooks.Open(@"D:/C.xlsx"); Excel._Worksheet xlWorksheet = xlWorkbook.Sheets[1]; Excel.Range xlRange = xlWorksheet.UsedRange; int rowCount = xlRange.Rows.Count; int colCount = xlRange.Columns.Count; for (int i = 1; i <= rowCount; i++) { for (int j = 1; j <= colCount; j++) { MessageBox.Show(xlRange.Cells[i, j].Value2.ToString()); } } } } } 

代码通过interop读取excel文件