Адрес диапазона

Автор Denis_Oleynikof, 30 сентября 2020, 07:08

0 Пользователи и 1 гость просматривают эту тему.

Denis_Oleynikof

Добрый день. Опять вопрос новичка.
Делаю
   Dim chartDataRange As Range
   Set chartDataRange = Range(chartDataSheet.Cells(1, 1), chartDataSheet.Cells(DATA_ROWS_COUNT, columnsCount))

т.е. задаю для диапазона номера ячеек.
А как мне вывести адрес диапазона в виде "A1:D6" ?

Denis_Oleynikof

Сам спросил, сам и нашел
Например так
Function Text_Rng(oRange As Range) As String
    Text_Rng = oRange.CellRange.AbsoluteName
End Function

Denis_Oleynikof

#2
Уж не стал делать новую тему, поскольку вопрос тоже про диапазоны.
Подскажите пожалуйста как правильно вставить диапазон данных в диаграмму, но диаграмма на одном листе а данные на другом.
Делаю примерно так (коряво конечно)
   sName = "Остатки денежных средств"
   sDataRng = chartDataRange.CellRange.AbsoluteName
 
   oRect = createObject("com.sun.star.awt.Rectangle")
   oSheet = ThisComponent.sheets(CHARTDATA_SHEET_NAME)
   oAddress = oSheet.getCellRangeByName( sDataRng ).getRangeAddress()

   curWorkBook.getSheets().insertNewByName(CHART_SHEET_NAME,0)  
   oSheet  = ThisComponent.sheets(0)
   oCharts = oSheet.getCharts()
   oRect   = createObject("com.sun.star.awt.Rectangle")   oCharts.addNewByName(sName, oRect,Array(oAddress), True, True)
 
  oChart = oCharts.getByName( sName )
  oChart.setRanges(Array(oAddress))
  oChartDoc = oChart.getEmbeddedObject()
  oTitle = oChartDoc.getTitle()
  oTitle.String = sName

В итоге все хорошо создается новый лист, на нем диаграмма, но диапазон у диаграммы текущий лист (не тот на котором данные)

Denis_Oleynikof

Up-ну если никто не против  :-\

sokol92

Возможно, помощь придет быстрее, если Вы приложите пример
Владимир.

Denis_Oleynikof

Ну так я же кусок кода указал
Попробую еще раз с комментами
    Dim chartDataRange As Range
    Set chartDataRange = Range(chartDataSheet.Cells(1, 1), chartDataSheet.Cells(DATA_ROWS_COUNT, columnsCount))
    'chartDataSheet - это страница где находится диапазон данных

    sName = "Остатки денежных средств"
    sDataRng = chartDataRange.CellRange.AbsoluteName
    ' sDataRng - адрес диапазона из страницы chartDataSheet
 
    oRect = createObject("com.sun.star.awt.Rectangle")

    oSheet = ThisComponent.sheets(CHARTDATA_SHEET_NAME)
    ' по сути это oSheet  = chartDataSheet

    oAddress = oSheet.getCellRangeByName( sDataRng ).getRangeAddress()

    curWorkBook.getSheets().insertNewByName(CHART_SHEET_NAME,0) 
    '  добавляю новую страницу CHART_SHEET_NAME = "Остатки ДС"

    oSheet  = ThisComponent.sheets(0)
    ' oSheet - присваиваю ее значение

    ' ну а дальше практически из учебника питаньяка
    oCharts = oSheet.getCharts()
    oRect   = createObject("com.sun.star.awt.Rectangle")   
    oCharts.addNewByName(sName, oRect,Array(oAddress), True, True)
 
   oChart = oCharts.getByName( sName )
   oChart.setRanges(Array(oAddress))
   ' вот тут как раз мы устанавливаем в oChart адреса из листа chartDataSheet - это страница где находится диапазон данных
   ' но почему, то  выделяется диапазон на текущем листе (новый созданный) где добавляем диаграмму
   oChartDoc = oChart.getEmbeddedObject()
   oTitle = oChartDoc.getTitle()
   oTitle.String = sName

sokol92

У Вас в структуре oAddress номер листа - 0. Затем Вы вставляете новый лист с номером 0. Вставьте лист с номером, например, 1. Или после вставки нового листа поменяйте номер листа в oAddress. Или присваивайте oAddress уже после вставки.
Владимир.