[英]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.