我正在使用EPPlus从现有模板创建Excel工作表。
我的代码上传到azure blob存储。 Azure数据工厂自定义活动使用它。
for this activity我需要使用azure blob中的模板excel文件。
我想为模板文件提供URL。
var newFile = new FileInfo("Report_Template.xlsx");
有任何解决方案或替代方案吗?
由于场景太少,我无法通过网络搜索获得解决方案。
答案 0 :(得分:1)
FileInfo适用于磁盘文件,而不是URL。无论如何,你不需要一个人使用EPPlus。作为Web sample shows,您可以将包直接保存到流:
ExcelPackage pck = new ExcelPackage();
var ws = pck.Workbook.Worksheets.Add("Sample1");
ws.Cells["A1"].Value = "Sample 1";
ws.Cells["A1"].Style.Font.Bold = true;
var shape = ws.Drawings.AddShape("Shape1", eShapeStyle.Rect);
shape.SetPosition(50, 200);
shape.SetSize(200, 100);
shape.Text = "Sample 1 saves to the Response.OutputStream";
pck.SaveAs(Response.OutputStream);
您可以使用类似的代码写入blob的流。您可以打开流以使用CloudBlockBlob.OpenWrite或等效的异步方法OpenWriteAsync写入blob:
ExcelPackage pck = new ExcelPackage();
var ws = pck.Workbook.Worksheets.Add("Sample1");
// Build the sheet then ...
var blockBlob = container.GetBlockBlobReference("somefile.xlsx");
using(var stream=blockBlob.OpenWrite())
{
pck.SaveAs(stream);
}
答案 1 :(得分:0)
昨天,当我想从SharePoint库加载Excel模板,更改数据并将更改另存为新的Excel文件并回到SharePoint时,我偶然发现了这个问题。因此,这可能会回答以下基本问题:如何通过url而不是FileInfo打开
。我做了以下工作,并且有效:
public string CreateSheet()
{
string siteUrl = SPContext.Current.Site.Url;
string retval = string.Empty;
SPSecurity.RunWithElevatedPrivileges(delegate()
{
using (SPSite sc = new SPSite(siteUrl))
{
using (SPWeb web = sc.OpenWeb())
{
SPFile spFile = web.GetFile("SiteCollectionDocuments/Template.xlsx");
Stream stream = spFile.OpenBinaryStream();
using (ExcelPackage p = new ExcelPackage(stream))
{
ExcelWorksheet sheetRoles = p.Workbook.Worksheets["Roles"];
sheetRoles.Cells[2, 1].Value = "Today: " + DateTime.Now.ToString("dd.MM.yyyy");
byte[] data = p.GetAsByteArray();
stream.Close();
web.AllowUnsafeUpdates = true;
SPDocumentLibrary lib = web.Lists.TryGetList("Site Collection Documents") as SPDocumentLibrary;
string fileName = "TheNewFileNameToUse-" + DateTime.Now.ToString("dd.MM.yyyy") + ".xlsx";
lib.RootFolder.Files.Add("SiteCollectionDocuments/" + fileName, data, true);
retval = siteUrl + "/_layouts/15/WopiFrame.aspx?sourcedoc=/SiteCollectionDocuments/" + fileName + "&action=default";
}
}
}
});
return retval;
}
如您所见,您可以通过从某个URL获取它而创建的流中创建一个ExcelPackage。即使这个答案很晚,也可能会对其他人有所帮助。
答案 2 :(得分:0)
您可以将 Azure 存储中的 blob 读取到内存流中,然后直接读取。代码示例类似于:
var storageAccount = CloudStorageAccount.Parse("Connection_String");
string dataBlobPath = "path_to_blob.xlsx";
var dataBlobUri = new Uri(storageAccount.BlobEndpoint,dataBlobPath);
var sourceBlob = new CloudBlockBlob(dataBlobUri, storageAccount.Credentials);
int worksheets;
using (Stream str = new MemoryStream())
{
await sourceBlob.DownloadToStreamAsync(str);
using (ExcelPackage p = new ExcelPackage(str))
{
worksheets = p.Workbook.Worksheets.Count;
}
}