从MemoryStream运行Microsoft Excel应用程序
有人知道,是否可以从未保存的文件打开Microsoft Excel? 从内存stream例如?
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应用程序,并说用户必须保存它,就像这个文档是一个新的。
你会使用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而不保存工作簿。 用户然后可以select更改所需的任何内容,然后手动保存工作簿。
不,没有办法直接从内存中打开工作簿。 但是, Application.Workbooks.Open
支持URL,因此您可以创build一个进程内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文件,但是你可以做的是如下:
- 在内存中创build一个Excel工作簿
- 使用
ChangeFileAccess
方法 (或您拥有的任何等效方法 )将工作簿设置为只读。 所以,如果他们想要一个副本,他们将需要保存它。 - 将Excel工作簿保存到一个临时目录
- 使用
Process.Start(...)
以新创build的Excel工作簿的参数启动excel.exe。 - 使用
Process.WaitForExit()
直到用户完成任何他们需要做的事情 - 当excel应用程序closures时,让你的程序删除临时文件。 这将是直接在
Process.WaitForExit()
之后的代码
- 从HTML生成Excel文件
- 如何使用VS2010registry编辑器在64位操作系统上创build自定义registry项“Programmable”
- C# – 合并两个DataTable。 任何解决scheme
- 从Excel内置对话框inheritance?
- C#Epplus将字节文件保存为桌面应用程序中的XLS
- 在Excel中以编程方式制作图表
- Excel会抛出exceptionHRESULT:0x800A03EC而用户仍在键入一个单元格和单元格值更改
- 在C#中导出Datagridview到Excel
- 使用Linq创buildOffice Excel文档到XML,XMLNS,XDeclaration,单元格格式(工作)