C#如何在不使Excel可见的情况下使用Interop从Excel读取和写入数据?

时间:2019-04-02 10:30:15

标签: c# excel interop

从2个.xls文件打开工作簿时,这些工作簿在后台可见。通常这是不可取的,因为它看起来不太好,但也会减慢程序速度。

有关此问题的问题曾经被提出过,但是没有一个答案可以解决问题。我从.xls文件读取数据的方式如下;

xlApp = new Microsoft.Office.Interop.Excel.Application();
xlWorkbook1 = xlApp.Workbooks.Open(path1);
xlWorksheet1 = (Microsoft.Office.Interop.Excel.Worksheet) xlWorkbook1.Worksheets.get_Item(1);
xlWorkbook2 = xlApp.Workbooks.Open(path2);
xlWorksheet2 = (Microsoft.Office.Interop.Excel.Worksheet) xlWorkbook2.Worksheets.get_Item(1);

我尝试了以下几种方法来打开工作簿,同时防止它们显示出来;

1。

xlApp = new Microsoft.Office.Interop.Excel.Application() { Visible = false };
xlWorkbook1 = xlApp.Workbooks.Open(path1);
xlWorksheet1 = (Microsoft.Office.Interop.Excel.Worksheet) xlWorkbook1.Worksheets.get_Item(1);
xlWorkbook2 = xlApp.Workbooks.Open(path2);
xlWorksheet2 = (Microsoft.Office.Interop.Excel.Worksheet) xlWorkbook2.Worksheets.get_Item(1);

2。

xlApp = new Microsoft.Office.Interop.Excel.Application();
xlApp.Visible = false;
xlApp.DisplayAlerts = false;
xlWorkbook1 = xlApp.Workbooks.Open(path1);
xlWorksheet1 = (Microsoft.Office.Interop.Excel.Worksheet) xlWorkbook1.Worksheets.get_Item(1);
xlWorkbook2 = xlApp.Workbooks.Open(path2);
xlWorksheet2 = (Microsoft.Office.Interop.Excel.Worksheet) xlWorkbook2.Worksheets.get_Item(1);

3。

xlApp = new Microsoft.Office.Interop.Excel.Application();
xlWorkbook1 = xlApp.Workbooks.Open(path1);
xlWorksheet1 = (Microsoft.Office.Interop.Excel.Worksheet) xlWorkbook1.Worksheets.get_Item(1);
xlWorkbook2 = xlApp.Workbooks.Open(path2);
xlWorksheet2 = (Microsoft.Office.Interop.Excel.Worksheet) xlWorkbook2.Worksheets.get_Item(1);
xlApp.Visible = false;
xlApp.DisplayAlerts = false;

方法3确实隐藏了工作簿,但是首先打开了工作簿,因此不能解决问题。我也尝试过以只读方式打开工作簿,但这似乎没有什么不同。我还需要能够写工作簿,因此以只读方式打开它们是没有选择的。无论如何,它并不能解决问题,但我只是在说明它,因此不会被建议作为解决方案。

有人知道如何实现所需的行为吗?

注意:我正在使用Windows 10。

3 个答案:

答案 0 :(得分:1)

我使用NetOffice.ExcelApi读取Excel文件。我为此创建了一个类。这不应显示Excel文件或Excel本身。不要忘记关闭并处理该文件,否则Excel将继续在后台运行,这可能会使您的PC崩溃。

using NetOffice.ExcelApi;

public class ExcelFile
{
    private Application _excelApp;
    private readonly Workbook _workbook;
    private Range _range;

    private ExcelFile(string path)
    {
        _excelApp = new Application();
        _workbook = _excelApp.Workbooks.Open(path);
    }

    private void CloseFile()
    {
        _workbook.Close(0);
        _excelApp.Quit();
        _excelApp.Dispose();
    }
}

答案 1 :(得分:0)

显然,该文件处于共享模式,这使文件显示出来。我已经关闭了共享模式,现在已修复。

答案 2 :(得分:-1)

xlApp.Visible = false;

尝试使用此代码