运行 Microsoft Excel 来自 MemoryStream 的应用程序
Run Microsoft Excel application from MemoryStream
有人知道吗,是否可以从未保存的文件中打开 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 打开它,但需要用户执行 'Save' 和 'SaveAs' 操作。
主要目标:使用准备好的工作表从 C# 代码打开 Microsoft Excel 应用程序,并告知用户必须保存它,就像这个文档是新文档一样。
您将使用 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,而不保存工作簿。然后,用户可以选择更改所需的任何内容,然后手动保存工作簿。
不,没有办法直接从内存中打开工作簿。但是,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
我不知道您是否可以像您想要的那样通过 MemoryStream
加载 Excel 文件,但您可以执行以下操作:
- 在内存中创建一个 Excel 工作簿
- 使用
ChangeFileAccess
method(或您拥有的任何等效项)将工作簿设置为只读。因此,如果他们想要它的副本,则需要保存它。
- 将 Excel 工作簿保存到临时目录
- 使用
Process.Start(...)
以新创建的 Excel 工作簿的参数启动 excel.exe。
- 使用
Process.WaitForExit()
直到用户完成他们需要做的任何事情
- 当 excel 应用程序关闭时,让您的程序删除临时文件。这将是
Process.WaitForExit()
之后的代码
有人知道吗,是否可以从未保存的文件中打开 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 打开它,但需要用户执行 'Save' 和 'SaveAs' 操作。
主要目标:使用准备好的工作表从 C# 代码打开 Microsoft Excel 应用程序,并告知用户必须保存它,就像这个文档是新文档一样。
您将使用 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,而不保存工作簿。然后,用户可以选择更改所需的任何内容,然后手动保存工作簿。
不,没有办法直接从内存中打开工作簿。但是,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
我不知道您是否可以像您想要的那样通过 MemoryStream
加载 Excel 文件,但您可以执行以下操作:
- 在内存中创建一个 Excel 工作簿
- 使用
ChangeFileAccess
method(或您拥有的任何等效项)将工作簿设置为只读。因此,如果他们想要它的副本,则需要保存它。 - 将 Excel 工作簿保存到临时目录
- 使用
Process.Start(...)
以新创建的 Excel 工作簿的参数启动 excel.exe。 - 使用
Process.WaitForExit()
直到用户完成他们需要做的任何事情 - 当 excel 应用程序关闭时,让您的程序删除临时文件。这将是
Process.WaitForExit()
之后的代码