簡體   English   中英

C# 使用 `byte[]` 中的 `OpenXml` 打開 excel 文件時出現問題

[英]C# Problem opening excel file using `OpenXml` from `byte[]`

使用OpenXml庫保存和打開文件時OpenXml 這是我的代碼:

    public static void SaveExcel(List<Dictionary<string, object>> listData, List<string> entityTypes, string appName)
    {
        using (var ms = new MemoryStream())
        using (var excel = SpreadsheetDocument.Create(ms, SpreadsheetDocumentType.Workbook))
        {
            
            var workBookPart = excel.AddWorkbookPart();
            workBookPart.Workbook = new Workbook();
            var workSheetPart = workBookPart.AddNewPart<WorksheetPart>();
            var workSheetData = new SheetData();
            workSheetPart.Worksheet = new Worksheet(workSheetData);
            var sheets = workBookPart.Workbook.AppendChild(new Sheets());
            var index = 1;
            foreach (var entityType in entityTypes)
            {
                
                var sheet = new Sheet
                {
                    Id = excel.WorkbookPart.GetIdOfPart(workSheetPart),
                    SheetId = 1U,
                    Name = entityType
                };
                sheets.AppendChild(sheet);
            }

            workBookPart.Workbook.Save(ms);
            File.WriteAllBytes("D:/nothing123.xlsx", ms.ToArray());
        }
    }

我很確定我做了正確的事情,盡管打開文件時出現此錯誤:

Excel 無法打開文件“nothing123.xlsx”,因為文件格式或文件擴展名無效。 驗證文件未損壞且文件擴展名與文件格式匹配。

知道我的代碼發生了什么嗎?

我不知道這是否與標簽相關,但我決定使用ClosedXml庫,因為它比OpenXml更容易使用。 我可以輕松地創建一個DataTable ,並創建一個Excel文件進行DataTable ,這是非常方便的。 這是我的快速示例代碼:

示例數據表

public DataTable getData() {    
        DataTable dt = new DataTable();   
        dt.TableName = "SheetName1";  
        dt.Columns.Add("FirstName");  
        dt.Columns.Add("LastName");     
        var row = dt.NewRow();
        row["FirstName"] = "Alvin";
        row["LastName"] = "Quezon"; 
        dt.Rows.Add(row);
        return dt;  
} 

Excel 到字節數組的示例代碼

public static byte[] GetExcelBytes(DataTable dataTable)
    {
        using (var ms = new MemoryStream())
        using (var workBook = new XLWorkbook())
        {
            workBook.Worksheets.Add(dataTable);
            workBook.SaveAs(ms);
            return ms.ToArray();
        }
    }

打開文件和極少的代碼使用時,我沒有遇到任何問題。

希望這將有助於任何想在未來使用它的人。

暫無
暫無

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

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