Как выделить все ячейки на листе в Excel.Range объект c #? - PullRequest
15 голосов
/ 31 января 2011

Я пытаюсь выделить все ячейки на листе Excel в объекте Excel.Range C # для применения автоподбора, границы и т. Д. У меня есть несколько объединенных ячеек на листах.

Есть ли какой-нибудь простой трюк для этого?

Ответы [ 10 ]

11 голосов
/ 08 ноября 2011
public void refreshSheetColumsSize(Worksheet ws)
 {
    ws.get_Range("a1").EntireRow.EntireColumn.Select();         
 }
11 голосов
/ 31 января 2011

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

lastCol = ActiveSheet.Range("a1").End(xlToRight).Column
lastRow = ActiveSheet.Cells(65536, lastCol).End(xlUp).Row
ActiveSheet.Range("a1", ActiveSheet.Cells(lastRow, lastCol)).Select
8 голосов
/ 16 мая 2012
Excel.Range theRange = (Excel.Range)CurrentSheet.UsedRange;

В этом примере CurrentSheet - это переменная, в которой вы сохранили лист, который используете в данный момент.

3 голосов
/ 31 января 2011

Официально, Excel.Worksheet.UsedRange.Rows и Excel.Worksheet.UsedRange.Columns.

На практике это глючит, вы должны вычесть начальную строку и столбец. Ближайший к правильному ответу:

   Public ReadOnly Property LastColumn() As Integer
        Get
            Return ExcelWorksheet.UsedRange.Columns.Count + _
                   ExcelWorksheet.UsedRange.Column - 1
        End Get
    End Property
    Public ReadOnly Property LastRow() As Integer
        Get
            Return ExcelWorksheet.UsedRange.Rows.Count + _
                   ExcelWorksheet.UsedRange.Row - 1
        End Get
    End Property

Возвращает как минимум всех использованных ячеек, иногда чуть больше. «Немного больше» может быть вызвано пустыми ячейками (а не пустыми) и другими случайными вещами Из исследования, которое я провел, это лучшее, что можно сделать.

Если вы действительно хотите выбрать все , тогда

ExcelWorksheet.Activate()
ExcelWorksheet.Cells.Select()
2 голосов
/ 31 января 2011

Некоторое время я не занимался разработкой Excel (Excel 2003), но всегда обнаруживал, что для записи макроса при выполнении задач, которые я хотел реализовать в коде, достаточно указателей.

В этом случае выделение всех ячеек и автоподгонка дают код:

Sub Macro1()
    Cells.Select
    Cells.EntireColumn.AutoFit
End Sub

, который я предположил бы, приблизительно, означал бы:

((Microsoft.Office.Interop.Excel.Range)_sheet.Cells.Select()).AutoFit();

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

1 голос
/ 07 августа 2012

Чтобы рассмотреть все ячейки рабочего листа, вы можете написать так:

workSheet.Cells[workSheet.Rows.Count,workSheet.Columns.Count]

OR

 workSheet.get_Range("A1","IV65536")

Чтобы рассмотреть использованные ячейки листа, вы можете написать:

workSheet.Rows.SpecialCells(XlCellType.xlCellTypeLastCell, XlSpecialCellsValue.xlTextValues)

Где «рабочий лист» представляет собой лист, над которым вы работаете. Оба примера кода возвращают диапазон.

Надеюсь, это поможет!

1 голос
/ 12 мая 2011

Значительно чище и не зависит от количества строк / столбцов, которые были увеличены в Excel 2007:

Если ваш лист находится в переменной wsData:

wsData.Range(wsData.Cells(1, 1), wsData.Cells(wsData.Rows.Count, wsData.Columns.Count))
0 голосов
/ 26 марта 2016
        xlWorksheet.get_Range("a1").EntireRow.EntireColumn.AutoFit();
        xlWorksheet.get_Range("a1").EntireColumn.EntireRow.AutoFit();

После заполнения ячейки.

0 голосов
/ 08 мая 2015
worksheet.Columns.AutoFit()

Где «рабочий лист» является переменной типа Рабочий лист

0 голосов
/ 06 июля 2014

Очень просто:

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