从C#读取Excel,什么新的?

我的问题是非常类似于这里问的问题: 从C#读取Excel文件

我的问题是现在是否有一个更好的方法(2年后),如果没有人有使用ACE OLEDB 12.0巫婆的例子似乎是最好的方式去使用它?

我需要做的是每晚读取xlsx文件的应用程序,将数据包装在Excel表格中,然后将其保存到数据库,还有其他的提示?

谢谢

使用ExcelPackage,你可以迭代所有表单和列,如下所示:

public class ExcelRead { public void ReadExcel() { FileInfo existingFile = new FileInfo(@"C:\temp\book1.xlsx"); using (ExcelPackage xlPackage = new ExcelPackage(existingFile)) { foreach (ExcelWorksheet worksheet in xlPackage.Workbook.Worksheets) { var dimension = worksheet.Dimension(); for (int row = dimension.StartRow; row <= dimension.EndRow; row++) { for (int col = dimension.StartColumn; col <= dimension.EndColumn; col++) { Console.WriteLine(row + ":" + col + " - " + worksheet.Cell(row, col)); } } } } } } public class Dimension { public int StartRow { get; set; } public int StartColumn { get; set; } public int EndRow { get; set; } public int EndColumn { get; set; } } public static class ExcelHelper { private static readonly char[] _numbers = new[] {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9'}; public static Dimension Dimension(this ExcelWorksheet worksheet) { string range = worksheet.WorksheetXml.SelectSingleNode("//*[local-name()='dimension']").Attributes["ref"].Value; string[] rangeCoordinates = range.Split(':'); int idx = rangeCoordinates[0].IndexOfAny(_numbers); int startRow = int.Parse(rangeCoordinates[0].Substring(idx)); int startCol = ConvertFromExcelColumnName(rangeCoordinates[0].Substring(0, idx)); if (rangeCoordinates.Length == 1) return new Dimension {StartRow = startRow, StartColumn = startCol, EndRow = startRow, EndColumn = startCol}; idx = rangeCoordinates[1].IndexOfAny(_numbers); int endRow = int.Parse(rangeCoordinates[1].Substring(idx)); int endCol = ConvertFromExcelColumnName(rangeCoordinates[1].Substring(0, idx)); return new Dimension {StartRow = startRow, StartColumn = startCol, EndRow = endRow, EndColumn = endCol}; } public static int ConvertFromExcelColumnName(string name) { name = name.ToUpper(); int result = 0; for (int i = 0; i < name.Length - 1; i++) { int val = name[i] - 64; int columnVal = (int) Math.Pow(26, name.Length - i - 1); result += val*columnVal; } result += name[name.Length - 1] - 64; return result; } } 

我不认为这是在其他线程列出。 我为Infragistics工作,我们有一个读取和写入excel文件的库。 你可以在这里下载试用版

我和EPPlus一起为excel文件写出了好运,我认为它也可以很好地读取它们。

Apache POI是一个免费的Java库,用于在没有安装Excel的情况下访问MS Office文档。 根据这篇文章 ,可以使用IKVM.NET为.NET程序提供POI。