繁体   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