補充說明: 以 NuGet 安裝 ClosedXML. ClosedXML 是為 Office Open XML 提供容易操作的程式介面,程式介面簡潔易用。 ClosedXML 是 OpenSource, 可在 GitHub 上取得原始碼: https://github.com/ClosedXML/ClosedXML 文件說明為: https://docs.closedxml.io/en/latest/ Office Open XML(縮寫:Open XML、OpenXML或OOXML),為由 Microsoft 開發的一種以 XML 為基礎, 並以 ZIP 格式壓縮的電子檔案規範, 支援 Office Word、Excel、備忘錄、PowerPoint等檔案格式。 https://zh.wikipedia.org/zh-tw/Office_Open_XML 範例: ClosedXML 將 Excel 表單設為保護狀態. var wb = new XLWorkbook(src); var ws = wb.Worksheets.First(); ws.Cells("A1").Value = "已修改"; ws.Protect("LetMeEdit"); wb.SaveAs(@"d:\temp\closedXml.xlsx"); 提問: 給我 C# .Net 8.0 的 Class, 包含ImportJson(), ExportJson()函數, 可將 Excel 檔案, 匯入或匯出為 Json UTF8 文字檔案. 以下是 C# .NET 8.0 的範例程式碼,提供 `ImportJson()` 和 `ExportJson()` 函數,用於將 Excel 檔案與 JSON UTF-8 文字檔案之間相互轉換。這需要使用 `ClosedXML` 套件來處理 Excel 檔案,以及 `System.Text.Json` 來處理 JSON。 ### **完整程式碼** ```csharp using System; using System.Collections.Generic; using System.IO; using System.Text.Json; using ClosedXML.Excel; // 使用 ClosedXML 套件 public class ExcelJsonHandler { // 匯出 Excel 至 JSON public void ExportJson(string excelFilePath, string jsonFilePath) { using var workbook = new XLWorkbook(excelFilePath); var worksheet = workbook.Worksheet(1); // 讀取第一個工作表 var rows = worksheet.RangeUsed().RowsUsed(); var data = new List>(); // 獲取標題列 (Header) var headers = new List(); foreach (var cell in rows.First().Cells()) { headers.Add(cell.GetValue()); } // 獲取資料列 (Data) foreach (var row in rows.Skip(1)) { var record = new Dictionary(); for (int i = 0; i < headers.Count; i++) { var cell = row.Cell(i + 1); record[headers[i]] = cell.Value; } data.Add(record); } // 寫入 JSON 檔案 var options = new JsonSerializerOptions { WriteIndented = true }; // 格式化輸出 string json = JsonSerializer.Serialize(data, options); File.WriteAllText(jsonFilePath, json, System.Text.Encoding.UTF8); Console.WriteLine($"已成功匯出 JSON 至 {jsonFilePath}"); } // 匯入 JSON 至 Excel public void ImportJson(string jsonFilePath, string excelFilePath) { // 讀取 JSON 檔案 string json = File.ReadAllText(jsonFilePath, System.Text.Encoding.UTF8); var data = JsonSerializer.Deserialize>>(json); using var workbook = new XLWorkbook(); var worksheet = workbook.Worksheets.Add("Sheet1"); if (data == null || data.Count == 0) { Console.WriteLine("JSON 檔案中沒有資料!"); return; } // 寫入標題列 (Header) var headers = new List(data[0].Keys); for (int i = 0; i < headers.Count; i++) { worksheet.Cell(1, i + 1).Value = headers[i]; } // 寫入資料列 (Data) for (int rowIndex = 0; rowIndex < data.Count; rowIndex++) { var row = data[rowIndex]; for (int colIndex = 0; colIndex < headers.Count; colIndex++) { worksheet.Cell(rowIndex + 2, colIndex + 1).Value = row[headers[colIndex]]; } } // 儲存 Excel 檔案 workbook.SaveAs(excelFilePath); Console.WriteLine($"已成功匯入資料至 Excel,檔案儲存於 {excelFilePath}"); } } public class Program { public static void Main() { var handler = new ExcelJsonHandler(); // 匯出 Excel 至 JSON handler.ExportJson("example.xlsx", "example.json"); // 匯入 JSON 至 Excel handler.ImportJson("example.json", "new_example.xlsx"); } } ``` ### **程式說明** 1. **`ExportJson()` 函數**: - 使用 `ClosedXML` 套件讀取 Excel 檔案。 - 遍歷工作表,將每一行轉換為 `Dictionary`,並存入集合。 - 使用 `System.Text.Json` 將集合序列化為 JSON,並存為 UTF-8 格式檔案。 2. **`ImportJson()` 函數**: - 讀取 JSON 檔案並反序列化為物件列表。 - 使用 `ClosedXML` 套件創建新的 Excel 工作表。 - 將 JSON 的欄位名稱寫入標題列,數據內容寫入資料列。 - 儲存 Excel 檔案。 3. **必要套件**: - 安裝 `ClosedXML` 套件以處理 Excel 檔案: ```bash dotnet add package ClosedXML ``` 4. **檔案格式**: - 匯出的 JSON 文件為 UTF-8 編碼,包含格式化的輸出。 - 匯入的 JSON 檔案結構需為列表形式,例如: ```json [ { "Name": "Alice", "Age": 25, "City": "New York" }, { "Name": "Bob", "Age": 30, "City": "Los Angeles" } ] ``` ### **使用建議** - 確保 Excel 檔案和 JSON 檔案格式正確並符合使用情境。 - 若需處理大量資料,可考慮最佳化程式中的記憶體使用或處理邏輯。 如果需要進一步修改或擴展,隨時告訴我! 😊