以文本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文件