Как добавить линии сетки на один лист, а не на другой (C# Excel Interop)?

Подобно некоторым ответам здесь, я отключаю линии сетки в моем файле 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 " и нашел это.

Затем я экстраполировал этот код "Virtual Buffoonery":

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 

... и C# сделал это так:

// 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. "...Не поддерживается такой интерфейс "

Так есть ли способ сделать это в C#, или это одна из тех областей, где Virus Bits имеет его над C#?

ОБНОВЛЕНИЕ 2

Эта вариация на тему вызывает тот же ответ от электронных духов:

_xlSheetDelPerf = (Worksheet)_xlSheets.Item[2];
WorksheetView wsv = (WorksheetView)_xlSheetDelPerf;
wsv.DisplayGridlines = true;
wsv.DisplayZeros = true;

1 ответ

Решение

Я не смог найти простой способ сделать это, поэтому я "грубо насиловал" так:

// Add borders to the sheet
var delPerfDataRange =
    _xlSheetDelPerf.Range[_xlSheetDelPerf.Cells[1, _xlSheetDelPerf.UsedRange.Columns.Count],            
_xlSheetDelPerf.Cells[_xlSheetDelPerf.UsedRange.Rows.Count, _xlSheetDelPerf.UsedColumns.Count]];
Borders _dataBorders = delPerfDataRange.Borders;
_dataBorders[XlBordersIndex.xlEdgeLeft].LineStyle = XlLineStyle.xlContinuous;
_dataBorders[XlBordersIndex.xlEdgeRight].LineStyle = XlLineStyle.xlContinuous;
_dataBorders[XlBordersIndex.xlEdgeTop].LineStyle = XlLineStyle.xlContinuous;
_dataBorders[XlBordersIndex.xlEdgeBottom].LineStyle = XlLineStyle.xlContinuous;
_dataBorders.Color = Color.Black;

На самом деле, в конечном итоге мне пришлось ограничить только то, какой диапазон листа был сгруппирован, так что я сделал это:

// Add borders around all the data
var delPerfDataRange =
    _xlSheetDelPerf.Range[_xlSheetDelPerf.Cells[DEL_PERF_FIRST_DATA_ROW, PROACT_DISTRIBUTOR_COLUMN],            
        _xlSheetDelPerf.Cells[curDelPerfRow - 1, TOTAL_PACKAGE_COUNT_COLUMN]];
Borders _dataBorders = delPerfDataRange.Borders;
_dataBorders[XlBordersIndex.xlEdgeLeft].LineStyle = XlLineStyle.xlContinuous;
_dataBorders[XlBordersIndex.xlEdgeRight].LineStyle = XlLineStyle.xlContinuous;
_dataBorders[XlBordersIndex.xlEdgeTop].LineStyle = XlLineStyle.xlContinuous;
_dataBorders[XlBordersIndex.xlEdgeBottom].LineStyle = XlLineStyle.xlContinuous;
_dataBorders.Color = Color.Black;
Другие вопросы по тегам