C#如何使用Interop从Excel读取和写入数据,而不显示Excel?

问题描述 投票:0回答:3

从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。

c# excel interop
3个回答
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();
    }
}

0
投票

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


-1
投票
xlApp.Visible = false;

尝试使用此代码

© www.soinside.com 2019 - 2024. All rights reserved.