有人知道,是否可以从未保存的文件中打开Microsoft Excel?例如从内存流?
var workbook = new XLWorkbook();
var worksheet = workbook.Worksheets.Add("Sample Sheet");
worksheet.Cell("A1").Value = "Hello World!";
using (var ms = new MemoryStream())
{
//IS IT POSSIBLE TO OPEN EXCEL BUT FROM UNSAVED MEMORYSTREAM?
//Process.Start(EXCEL MS HERE);
}
或者,将文件保存到某个临时文件夹,然后通过Excel打开,但要求用户“保存”和“另存为”操作。
主要目标:使用准备好的工作表从C#代码打开Microsoft Excel应用程序,并说用户必须保存它,就像这个文档是新的一样。
答案 0 :(得分:3)
您可以使用Excel Interop执行此操作。
using Excel = Microsoft.Office.Interop.Excel;
Excel.Application excel = new Excel.Application();
excel.Visible = true;
Excel.Workbook workbook = excel.Workbooks.Add(Excel.XlSheetType.xlWorksheet);
Excel.Worksheet sheet = workbook.Sheets[1];
sheet.Cells[1, 1] = "Hello World!";
这将在用户的计算机上打开Excel而不保存工作簿。然后,用户可以选择更改所需内容,然后手动保存工作簿。
答案 1 :(得分:0)
不,没有办法直接从内存中打开工作簿。但是,Application.Workbooks.Open
支持URL,因此您可以创建进程内HTTP服务器并以此方式提供服务。对于大多数用途来说,这可能有点过头了。
通常,当我想发送预先打包的文档时,我会将文档作为独立文件发送,或者将它们从内存写入临时位置。在任何一种情况下,您都希望阻止用户将文件保存在源位置。你可以这两种方式:
(首选)将文档作为模板(.xltx)而不是文档发送,然后使用Application.Workbooks.Add
。
Application.Workbooks.Add "X:\path\to\template.xltx"
以只读模式打开文档,方法是将文件设置为只读或使用Application.Workbooks.Open
的ReadOnly
参数。可以编辑只读文档但不能保存。
Application.Workbooks.Open "X:\path\to\document.xlsx", , True
答案 2 :(得分:0)
我不知道您可以通过MemoryStream
像您一样想要加载Excel文件,但您可以做的是以下内容:
ChangeFileAccess
method(或您拥有的任何等效内容)将工作簿设置为只读。所以,如果他们想要一份副本,他们就需要保存它。Process.Start(...)
使用新创建的Excel工作簿的参数启动excel.exe。Process.WaitForExit()
直到用户完成他们需要做的任何事情Process.WaitForExit()