Подобно некоторым ответам здесь, я отключаю линии сетки в своем файле Excel таким образом. :
private ApplicationClass _xlApp;
. . .
_xlApp = new ApplicationClass { UserControl = true };
_xlApp.ActiveWindow.DisplayGridlines = false;
Однако в моей рабочей книге я создаю два листа, и второй должен отображать линии сетки. Как я могу переключить отображение линий сетки на уровне рабочего листа?
Я пробовал это:
private ApplicationClass _xlApp;
private ApplicationClass _xlApp2;
. . .
_xlApp = new ApplicationClass { UserControl = true };
_xlApp.ActiveWindow.DisplayGridlines = false;
. . .
_xlApp2 = new ApplicationClass { UserControl = true };
_xlApp2.ActiveWindow.DisplayGridlines = true;
... но это выдало электронное письмо, информирующее меня во время выполнения, что «Ссылка на объект не указывает на экземпляр объекта» в последней строке, отображаемой выше.
Итак, могу ли я установить один лист с сеткой, а другой без сетки, или мне придется взять на себя ответственность и добавить универсальные границы на второй лист?
ОБНОВИТЬ
Ссылка от Дэвида Тэнси была интригующей, но она не давала никакого конкретного или даже абстрактного примера того, как использовать объект Worksheetview. Итак, я проглотил (бац?) «Пример отображения таблицы взаимодействия c# Excel» и нашел это.
Затем я экстраполировал этот код «Виртуального шутовства»:
Dim wsv As WorksheetView
Set wsv = wnd.SheetViews(1)
' Display formulas and zeros, but hide
' gridlines, headings, and outlines:
wsv.DisplayFormulas = True
wsv.DisplayGridlines = False
wsv.DisplayHeadings = False
wsv.DisplayOutline = False
wsv.DisplayZeros = True
... и С# определил это так:
// existing:
private ApplicationClass _xlApp;
_xlApp = new ApplicationClass { UserControl = true };
// new / extrapolated:
WorksheetView wsv = _xlApp.ActiveWindow.SheetViews(2);
wsv.DisplayGridlines = true;
wsv.DisplayZeros = true;
... но получил шутку во время компиляции: «Не вызываемый элемент Microsoft.Office.Interop.Excel.Window.SheetViews не может использоваться как метод.»
Итак, я попробовал это:
WorksheetView wsv = (WorksheetView)_xlApp.Sheets[2];
wsv.DisplayGridlines = true;
wsv.DisplayZeros = true;
Он скомпилирован, но во время выполнения я очень разочарован (и даже расстроен, цитируя Хампердинка) тем, что «невозможно привести тип COM-объекта «System.__ComObject» к типу интерфейса «Microsoft.Office.Interop.Excel.WorksheetView». .'...Такой интерфейс не поддерживается"
Так есть ли способ сделать это на С#, или это одна из тех областей, где Virus Bits имеет это по сравнению с С#?
ОБНОВЛЕНИЕ 2
Эта вариация на тему вызывает такой же отклик у электронных духов:
_xlSheetDelPerf = (Worksheet)_xlSheets.Item[2];
WorksheetView wsv = (WorksheetView)_xlSheetDelPerf;
wsv.DisplayGridlines = true;
wsv.DisplayZeros = true;
WorksheetView
, который имеет свойствоDisplayGridLines
msdn.microsoft. .com/EN-US/library/office/ff837066.aspx - person David Tansey   schedule 01.12.2015WorksheetView
не работает. Является ли ваш вызов Sheets[2] нулевым? Он даже возвращаетWorksheetView
? - person The Muffin Man   schedule 02.12.2015