EPPlus 返回从 SharePoint 下载的 Excel 文件,不带任何工作表

问题描述 投票:0回答:1

我使用 Microsoft Graph 从 SharePoint 获取 Excel 文件,然后使用 EPPlus 将 IFormFile 转换为 Excel 文件。这在过去是有效的,但我们最近升级到了 .Net 7。这是我正在使用的

.Net 7

MS Graph 版本:5.39

EPPlus版本:7.0.6

这是我从 SharePoint 获取文件的代码:(仅供参考 - DAFormFile 继承自 IFormFile)

var fileContent = await _graphServiceClient.Drives[docFolderId].Items[file.Id].Content.GetAsync();
using var ms = new MemoryStream();
await fileContent.CopyToAsync(ms);
var length = ms.Length;
var bob = new MemoryStream(ms.ToArray());

string fileDate = "";

if (myRegex != null)
{
    fileDate = myRegex.Match(file.Name).ToString();
}

DAFormFile formfile = new DAFormFile(
    baseStream: bob,
    baseStreamOffset: ms.Position,
    length: length,
    name: fileDate,
    fileName: file.Name
    )
{
    Headers = new HeaderDictionary(),
    ContentType = file.File.MimeType == mimeTypeXlsm ? "application/vnd.ms-excel.sheet.macroEnabled.12" : "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"
};

这是我将文件转换为 Excel 文件的代码:

if (!string.IsNullOrEmpty(password))
{
    //We need to create a read/write memory stream that is needed to read a password protected file
    MemoryStream readWrite = new MemoryStream();
    excelFile.CopyTo(readWrite);
    return new ExcelPackage(readWrite);
}
else
{
    return new ExcelPackage(excelFile.OpenReadStream());
}

第一步生成的 IFormFile 对象有一个长度。但是,文件转换为 Excel 文件后,就没有工作表了。谁能告诉我我做错了什么?我有一种感觉与 IFormFile 创建有关,但我不确定。

c# microsoft-graph-api epplus .net-7.0
1个回答
0
投票

当您创建

DAFormFile
的新实例时,您设置

baseStreamOffset: ms.Position

我相信流中的当前位置(

ms.Position
)被设置为流的末尾,因此它可以影响代码的其余部分。

尝试将

baseStreamOffset
设置为
0

否则我们需要更多细节。不知道如何创建

excelFile
以及如何实施
DAFormFile

© www.soinside.com 2019 - 2024. All rights reserved.