簡體   English   中英

使用C#讀取單個xlsx中的多個Excel工作表

[英]Read multiple Excel worksheets inside a single xlsx using c#

我正在嘗試開發一段代碼,該代碼將從單個xlsx中的3個工作表中獲取數據並將其上傳到SQL Server上的3個不同的表中。 每個工作表都應將其內容上載到單個表(工作表1上載到表Customer,工作表2上載到表Sales,...)

我設法將其從工作表1上的所有數據上傳到表中……這是它的代碼:

public partial class LoggedHome : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
    if (IsPostBack && Upload.HasFile)
    {
        if (Path.GetExtension(Upload.FileName).Equals(".xlsx")) 
        {
            var excel = new ExcelPackage(Upload.FileContent); 
            var dt = excel.ToDataTable(); 
            var table = "MenuPrice";
            using (var conn = new SqlConnection("Removed for security purpouses"))
            {
                var bulkCopy = new SqlBulkCopy(conn);
                bulkCopy.DestinationTableName = table;
                conn.Open();
                var schema = conn.GetSchema("Columns", new[] { null, null, table, null });
                foreach (DataColumn sourceColumn in dt.Columns)
                {
                    foreach (DataRow row in schema.Rows)
                    {
                        if (string.Equals(sourceColumn.ColumnName, (string)row["COLUMN_NAME"], StringComparison.OrdinalIgnoreCase))
                        {
                            bulkCopy.ColumnMappings.Add(sourceColumn.ColumnName, (string)row["COLUMN_NAME"]);
                            break;
                        }
                    }
                }
                bulkCopy.WriteToServer(dt);
            }
        }
        else
        {
            ScriptManager.RegisterClientScriptBlock(this, this.GetType(), "alertMessage", "alert('This is not an Excel file. Please upload a proper file.')", true);
        }
    }
}
}

public static class ExcelPackageExtensions
{
public static DataTable ToDataTable(this ExcelPackage package)
{
    ExcelWorksheet workSheet = package.Workbook.Worksheets.First();
    DataTable table = new DataTable();
    foreach (var firstRowCell in workSheet.Cells[1, 1, 1, workSheet.Dimension.End.Column])
    {
        table.Columns.Add(firstRowCell.Text);
    }
    for (var rowNumber = 2; rowNumber <= workSheet.Dimension.End.Row; rowNumber++)
    {
        var row = workSheet.Cells[rowNumber, 1, rowNumber, workSheet.Dimension.End.Column];
        var newRow = table.NewRow();
        foreach (var cell in row)
        {
            newRow[cell.Start.Column - 1] = cell.Text;
        }
        table.Rows.Add(newRow);
    }
    return table;
}
}

任何幫助深表感謝! 謝謝

該行僅檢索第一個工作表

ExcelWorksheet workSheet = package.Workbook.Worksheets.First();

像對單元格和行所做的那樣,將其更改為for循環

DataTable table = new DataTable();
foreach (var workSheet in package.Workbook.Worksheets)
{
    // Existing code
}
return table;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM