如何在内存中使用excel文件

时间:2016-08-25 14:13:01

标签: c# excel

目前我的当前流程如下。查询数据库 - >在本地保存文件 - >使用Excel Interop Dll打开工作簿,对工作簿进行更改,使用Excel Interop Dll另存为。保存的原因是因为我需要一些额外设置,因此文件不能设置为只读。

我遇到的问题是它在本地保存了两次。第一次没问题,第二次出现提示,询问我是否要覆盖。我想知道如何删除本地保存文件进程并将其保存在内存中以便使用?如果我能够在内存中使用该文件,我会在Save As上提示我是否要覆盖以前的文件。

代码:

//Save File Locally
System.IO.File.WriteAllBytes(saveFileDialog.FileName, Report.FileArray);

var fileLocation = saveFileDialog.InitialDirectory + saveFileDialog.FileName;

Microsoft.Office.Interop.Excel.Application excel = new Microsoft.Office.Interop.Excel.Application();

// Open Workbook Using Excel Interop Dll
Workbook wb = excel.Workbooks.Open(fileLocation);

Worksheet ws1 = wb.Worksheets.get_Item("English");

//Make Changes To WorkBook
ws1.Range["E5"].Value = StartDate;
ws1.Range["G5"].Value = EndDate;

// Save AS Using Excel Interop With shared settings to remove read only access
wb.SaveAs(fileLocation, AccessMode: XlSaveAsAccessMode.xlShared);

Process.Start(fileLocation);

3 个答案:

答案 0 :(得分:1)

你最好禁用提示,我记得这是可能的,但这意味着许多用完的代码......

试试这个

Microsoft.Office.Interop.MSProject.Application msProjectApp = new Microsoft.Office.Interop.MSProject.Application();
msProjectApp.DisplayAlerts = false;

修改

Microsoft.Office.Interop.Excel.Application msProjectApp = new Microsoft.Office.Interop.Excel.Application();
    msProjectApp.Visible = true; //show the application and not need to start a process
    msProjectApp.DisplayAlerts = false;

答案 1 :(得分:0)

//Save File Locally
System.IO.File.WriteAllBytes(saveFileDialog.FileName, Report.FileArray);

var fileLocation = saveFileDialog.InitialDirectory + saveFileDialog.FileName;

 Microsoft.Office.Interop.Excel.Application excel = new Microsoft.Office.Interop.Excel.Application();

// Open Workbook Using Excel Interop Dll
Workbook wb = excel.Workbooks.Open(fileLocation);

Worksheet ws1 = wb.Worksheets.get_Item("English");

//Make Changes To WorkBook
ws1.Range["E5"].Value = StartDate;
ws1.Range["G5"].Value = EndDate;

// Save Only
wb.Save();

删除Process.Start

excel.Visible = true;
excel.DisplayAlerts = false;

答案 2 :(得分:0)

如果您拥有"工作簿可以预先设置好玩,只是加载数据,我发现OleDB Access SQL连接方法是将原始数据加载到SQL的更好方法。