我使用 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 创建有关,但我不确定。
当您创建
DAFormFile
的新实例时,您设置
baseStreamOffset: ms.Position
我相信流中的当前位置(
ms.Position
)被设置为流的末尾,因此它可以影响代码的其余部分。
尝试将
baseStreamOffset
设置为 0
。
否则我们需要更多细节。不知道如何创建
excelFile
以及如何实施 DAFormFile