C # Как читать и записывать данные из Excel, используя Interop, не делая Excel видимым? - PullRequest
0 голосов
/ 02 апреля 2019

При открытии рабочей книги из 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 ]

1 голос
/ 02 апреля 2019

Я использовал NetOffice.ExcelApi для чтения файлов Excel. Я создал класс для этого. Это не должно показать файл Excel или сам Excel. Не забудьте закрыть и утилизировать файл, иначе Excel продолжит работать в фоновом режиме, что может привести к сбою вашего компьютера.

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 голосов
/ 02 апреля 2019

Очевидно, файл находился в режиме совместного использования, и это заставило файл обнаружиться. Я отключил режим совместного использования, и теперь он исправлен.

0 голосов
/ 02 апреля 2019
xlApp.Visible = false;

попробуйте использовать этот код

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...