[研究]ASP.NET,WebForm,用 MiniExcel 1.34.2匯出、匯入 .xlsx (不支援 .ods)
2024-10-28
環境:Visual Studio 2022 + ASP.NET + WebForm + Web Application + C# + SQL Server 2019 + SQL Server Management Studio (SSMS) 19
********************************************************************************
Fast, Low-Memory, Easy Excel .NET helper to import/export/template spreadsheet
用於匯入/匯出/範本電子表格的快速、低記憶體、簡單的 Excel .NET 助手
Github : https://github.com/mini-software/MiniExcel
Gitee : https://gitee.com/dotnetchina/MiniExcel
Issues : https://github.com/mini-software/MiniExcel/issues
Todo : https://github.com/mini-software/MiniExcel/projects/1?fullscreen=true
授權 Apache-2.0
匯入、匯出範例:https://github.com/mini-software/MiniExcel?tab=readme-ov-file#getstart1
********************************************************************************
【匯出.xlsx】
Default.aspx
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs"
Inherits="WebApplication1.Default" %>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<title></title>
</head>
<body>
<form id="form1" runat="server">
<asp:Button ID="Button1" runat="server" Text="Button" OnClick="Button1_Click" />
</form>
</body>
</html>
|
Default.aspx.cs
using MiniExcelLibs;
using System;
using System.Collections.Generic;
using System.IO;
namespace WebApplication1
{
public partial class Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
}
protected void Button1_Click(object sender, EventArgs e)
{
var data = new List<Dictionary<string, object>>
{
new Dictionary<string, object> { { "Name", "Alice" }, { "Age", 25 }, { "City", "Taipei" } },
new Dictionary<string, object> { { "Name", "Bob" }, { "Age", 30 }, { "City", "Kaohsiung" } }
};
// 設定 Response 內容
Response.Clear();
Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
Response.AddHeader("Content-Disposition", "attachment;filename=ExportData.xlsx");
// 匯出 Excel
using (var stream = new MemoryStream())
{
MiniExcel.SaveAs(stream, data);
stream.WriteTo(Response.OutputStream);
Response.Flush();
}
Response.End();
}
}
}
|
********************************************************************************
【匯入.xlsx】
Default2.aspx
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default2.aspx.cs"
Inherits="WebApplication1.Default2" %>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<title></title>
</head>
<body>
<form id="form1" runat="server">
<asp:FileUpload ID="FileUpload1" runat="server" /><br />
<asp:Button ID="Button1" runat="server" Text="Button" OnClick="Button1_Click" /><br />
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="true" />
</form>
</body>
</html>
|
Default2aspx.cs
using MiniExcelLibs;
using System;
using System.Data;
namespace WebApplication1
{
public partial class Default2 : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
}
protected void Button1_Click(object sender, EventArgs e)
{
if (FileUpload1.HasFile)
{
try
{
// 獲取上傳的檔案流
using (var stream = FileUpload1.PostedFile.InputStream)
{
// 使用 MiniExcel 讀取 Excel 檔案
//var data = stream.ReadExcel();
//var table = MiniExcel.QueryAsDataTable(stream, useHeaderRow: true);
//var table = MiniExcel.QueryAsDataTable(stream, useHeaderRow: false);
var table = MiniExcel.QueryAsDataTable(stream);
// 創建一個新的 DataTable 用於存放處理過的資料
DataTable processedTable = new DataTable();
// 添加列到 processedTable
foreach (DataColumn column in table.Columns)
{
processedTable.Columns.Add(column.ColumnName, typeof(string));
//processedTable.Columns.Add(column.ColumnName, typeof(System.String)); //也可
}
// 逐行逐列處理資料
foreach (DataRow row in table.Rows)
{
DataRow newRow = processedTable.NewRow();
for (int i = 0; i < table.Columns.Count; i++)
{
newRow[i] = row[i]; // 這裡可以進行自定義處理
}
processedTable.Rows.Add(newRow);
}
GridView1.DataSource = processedTable;
GridView1.DataBind();
}
}
catch (Exception ex)
{
// 處理例外情況
Response.Write($"錯誤: {ex.Message}");
}
}
else
{
Response.Write("請選擇一個檔案進行匯入。");
}
}
//---
}
}
|
結果
相關



沒有留言:
張貼留言