Как я могу удалить все линии сетки в электронной таблице Excel, кроме тех, которые были добавлены мной явно после очистки их всех?

Да, этот вопрос уже задавался, но предоставленный ответ не работает для меня. Чтобы быть более конкретным:

Желая иметь линии сетки только там, где есть данные (которые я добавляю сам), и убрать более светлые линии сетки, которые появляются по умолчанию повсюду, я нашел этот принятый ответ... но он не работает для меня.

Используя этот код для настройки:

using Excel = Microsoft.Office.Interop.Excel;
. . .
private Excel.Application _xlApp;

... эта инициализация компиляции Excel.Application (назначение bool свойству DisplayGridLines _xlApp вне его инициализатора):

_xlApp = new Excel.Application
{
    SheetsInNewWorkbook = 1,
    StandardFont = "ponceDeLeon",
    StandardFontSize = 11
};
_xlApp.Windows.Application.ActiveWindow.DisplayGridlines = false;

... но это (добавление кода в инициализатор) не компилируется (я получаю, "Недопустимый декларатор члена инициализатора" и "Имя" Windows "не существует в текущем контексте"):

_xlApp = new Excel.Application
{
    SheetsInNewWorkbook = 1,
    StandardFont = "ponceDeLeon",
    StandardFontSize = 11,
    Windows.Application.ActiveWindow.DisplayGridlines = false
};

... и не компилируется с "Excel". перед "Windows.", хотя кажется, что этого нужно (предлагая импортировать 'Microsoft.Office.Interop.Excel.Windows' и все другие ссылки в файле "). Жалобы компилятора следующие:

An object reference is required for the non-static field, method, or property 'Microsoft.Office.Interop.Excel.Windows.Application.get'"

---а также:

Invalid initializer member declarator

У меня уже есть Microsoft.Office.Interop.Excel.Windows в папке References моего проекта, и фактически я успешно генерирую файл.xlsx. Сейчас я нахожусь в части проекта "gingerbread/finish" (косметика / форматирование).

Даже в случае компиляции кода он на самом деле не работает - он завершается с ошибкой во время выполнения с: "System.NullReferenceException не обработано.... Ссылка на объект не установлена ​​на экземпляр объекта".

Итак, как я могу "стереть с листа" линии сетки и позволить отображать только те, которые я явно применил, на листе?

1 ответ

Решение

Вам нужно установить _xlApp.Windows.Application.ActiveWindow.DisplayGridlines = false; в другое время. Вы должны открыть или создать рабочую книгу, прежде чем устанавливать значение. Тогда все должно работать нормально.

Когда вы открываете существующий Excel-файл:

        Excel.Application app = new Excel.Application();
        //app.ActiveWindow.DisplayGridlines = false;//Error
        Excel.Workbooks workbooks = app.Workbooks;
        //app.ActiveWindow.DisplayGridlines = false;//Error

        workbooks.Open(filename);
        app.ActiveWindow.DisplayGridlines = false;//No Error

При создании нового Excel-файла:

        Excel.Application app = new Excel.Application();
        Excel.Workbook workbook = app.Workbooks.Add(System.Reflection.Missing.Value);
        app.ActiveWindow.DisplayGridlines = false;
Другие вопросы по тегам