[英]reading excel from c#, anything new?
我的問題與這里提到的問題非常相似: 從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使POI可用於.NET程序。
我對Aspose Cells有很好的經驗
http://www.aspose.com/categories/.net-components/aspose.cells-for-.net/default.aspx
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.