使用 openxml 将行追加到 azure blob 存储中的 excel

Posted

技术标签:

【中文标题】使用 openxml 将行追加到 azure blob 存储中的 excel【英文标题】:Append rows to excel in azure blob storage using openxml 【发布时间】:2021-10-08 16:33:58 【问题描述】:

我正在使用 openxml 在 azure blob 中生成一个 excel 文件,我想将行附加到 blob 中的 excel 文件中,而不会将整个文件加载到内存中。文件可能非常大,所以我想从数据库中获取大块数据并继续附加数据。

我尝试过使用

       var storageAccount = CloudStorageAccount.Parse("Connection string");

        // Connect to the blob storage
        var serviceClient = storageAccount.CreateCloudBlobClient();

        // Connect to the blob container
        var container = serviceClient.GetContainerReference("Container name");

        await container.CreateIfNotExistsAsync();
        var appendBlob = container.GetAppendBlobReference(fileName);
        using (SpreadsheetDocument spreadsheetDocument = SpreadsheetDocument.Open(appendBlob.Uri.ToString(), true))
        
            WorkbookPart workbookpart = spreadsheetDocument.WorkbookPart;

            WorksheetPart worksheetPart = workbookpart.WorksheetParts.First();
            var worksheet = worksheetPart.Worksheet;

            SheetData sheetData = worksheetPart.Worksheet.GetFirstChild<SheetData>();
            Row lastRow = sheetData.Elements<Row>().LastOrDefault();

            if (lastRow != null)
            
                sheetData.InsertAfter(new Row()  RowIndex = lastRow.RowIndex + 1 , dataRow);
            

            workbookpart.Workbook.Save();

            // Close the document.
            spreadsheetDocument.Close();

            memStream.Seek(0, SeekOrigin.Begin);

            await appendBlob.AppendFromStreamAsync(memoryStream);
        

SpreadsheetDocument.Open 无法打开文件进行追加。有办法吗?

【问题讨论】:

【参考方案1】:

希望您附加到现有文件。请查看以下是否可能是您打开文件问题的情况。

请检查您是否在SpreadsheetDocument.Open(file path name,true);中提供了正确的文件路径名

查看文件路径名是否为 .xlsx 格式。

由于代码已经在使用“using (SpreadsheetDocument sp………….)””,因此不需要使用SpreadsheetDocument.close(); 语句.您可以删除该语句并重试。

由于using语句,任务完成后工作表会自动关闭。

否则尝试使用 SpreadsheetDocument.Open(file path, FileMode.Open,FileMode.Read,Filemode.Write,...)

【讨论】:

以上是关于使用 openxml 将行追加到 azure blob 存储中的 excel的主要内容,如果未能解决你的问题,请参考以下文章

使用 R 将行追加到 .csv 文件

如何使用 jQuery 将行追加到表中?

使用 append() 将行追加到表单,但是当它提交时它不包括来自追加行的数据[重复]

Matlab - 迭代地将行插入/追加到矩阵中

如何将行追加到另一个数据帧

使用jquery将行添加到表中[重复]