Ответ 1
Взято из здесь, это выберет все ячейки на листе:
lastCol = ActiveSheet.Range("a1").End(xlToRight).Column
lastRow = ActiveSheet.Cells(65536, lastCol).End(xlUp).Row
ActiveSheet.Range("a1", ActiveSheet.Cells(lastRow, lastCol)).Select
Я пытаюсь выбрать все ячейки в листе Excel в объекте Excel.Range
объекта С# для применения автоматической подгонки, границы и т.д. У меня есть некоторые объединенные ячейки в листах.
Есть ли какой-нибудь простой трюк?
Взято из здесь, это выберет все ячейки на листе:
lastCol = ActiveSheet.Range("a1").End(xlToRight).Column
lastRow = ActiveSheet.Cells(65536, lastCol).End(xlUp).Row
ActiveSheet.Range("a1", ActiveSheet.Cells(lastRow, lastCol)).Select
public void refreshSheetColumsSize(Worksheet ws)
{
ws.get_Range("a1").EntireRow.EntireColumn.Select();
}
Excel.Range theRange = (Excel.Range)CurrentSheet.UsedRange;
В этом примере CurrentSheet - это переменная, в которой вы сохранили текущий лист, который вы используете.
Я не делал каких-либо предварительных разработок какое-то время (Excel 2003), но я всегда обнаружил, что запись макроса при выполнении задач, которые я хотел реализовать в коде, имеют достаточные указатели, чтобы помочь.
В этом случае выбор всех ячеек и автозаполнение дает код:
Sub Macro1()
Cells.Select
Cells.EntireColumn.AutoFit
End Sub
который я бы предположил, грубо переводил бы на:
((Microsoft.Office.Interop.Excel.Range)_sheet.Cells.Select()).AutoFit();
где _sheet - это экземпляр используемого вами листка. (Непроверенные)
Официально, 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()
Многое более чистое и не зависит от количества строк/столбцов, которые были увеличены в Excel 2007:
Если ваш лист находится в переменной wsData:
wsData.Range(wsData.Cells(1, 1), wsData.Cells(wsData.Rows.Count, wsData.Columns.Count))
Чтобы рассмотреть все ячейки рабочего листа, вы можете написать:
workSheet.Cells[workSheet.Rows.Count,workSheet.Columns.Count]
ИЛИ
workSheet.get_Range("A1","IV65536")
Чтобы рассмотреть используемые ячейки рабочего листа, вы можете написать:
workSheet.Rows.SpecialCells(XlCellType.xlCellTypeLastCell, XlSpecialCellsValue.xlTextValues)
Где "рабочий лист" представляет лист, над которым вы работаете. Оба примера кода возвращают диапазон.
Надеюсь, что это поможет!
Очень просто:
xlWorkSheet.UsedRange.Columns.Select()
worksheet.Columns.AutoFit()
Где "рабочий лист" является переменной типа Worksheet
xlWorksheet.get_Range("a1").EntireRow.EntireColumn.AutoFit();
xlWorksheet.get_Range("a1").EntireColumn.EntireRow.AutoFit();
После завершения заполнения ячейки.