:: Архив конференции по VFP до 2005 года
Re: Excel.Charts.SeriesCollection.XValues
AleksM

Сообщений: 17881
Дата регистрации: 11.11.2003
Вот так вроде работает. Или я что то упустил для твоего случая?
LOCAL loXls, loWorkbook, loWorkSheet, loChart
* Это первое создание диаграммы
loXls = CREATEOBJECT("Excel.Application")
loXls.Visible = .T.
loWorkbook = loXls.Workbooks.Add
loWorkSheet=loWorkbook.Sheets(1)
FOR i = 0 TO 9
loXls.ActiveCell.Offset(i,0)=DATE()+i
loXls.ActiveCell.Offset(i,1)=i
loXls.ActiveCell.Offset(i,2)=i*i
NEXT i
loWorkbook.Charts.Add
loChart = loWorkbook.ActiveChart
WITH loChart
.ChartType = 4 &&xlLine
.SetSourceData(loWorkSheet.Range("B1:C10"), 2) && xlColumns
.SeriesCollection(1).XValues = loWorkSheet.Range("A1:A10")
.SeriesCollection(2).XValues = loWorkSheet.Range("A1:A10")
.HasTitle = .F.
.Axes(1, 1).HasTitle = .F.
.Axes(2, 1).HasTitle = .F.
.Location(2, loWorkSheet.Name) && Where:=xlLocationAsObject, Name:="Лист4"
ENDWITH
* Меняем исходные данные
loWorkSheet.Range("A1").Select
FOR i = 0 TO 14
loXls.ActiveCell.Offset(i,0)=DATE()+i
loXls.ActiveCell.Offset(i,1)=i
loXls.ActiveCell.Offset(i,2)=i*i
NEXT i
* Переопределяем параметры диаграммы
loWorkSheet.ChartObjects(1).Activate
loChart = loWorkbook.ActiveChart
WITH loChart
.SetSourceData(loWorkSheet.Range("B1:C15"), 2) && xlColumns
.SeriesCollection(1).XValues = loWorkSheet.Range("A1:A15")
.SeriesCollection(2).XValues = loWorkSheet.Range("A1:A15")
ENDWITH




------------------
Лучше переесть, чем недоспать.
Не спеши, а то успеешь.
Ratings: 0 negative/0 positive
Re: Excel.Charts.SeriesCollection.XValues
Петров Андрей
Автор

Сообщений: 2506
Откуда: Химки (М.О.)
Дата регистрации: 17.04.2002
Неа этот вариант не проходит. Читаем заново
Цитата:
Есть "шаблон" XLS содержащий 3 листа 1,2 диаграммы 3 - данные к диаграммам
Те шаблон программно не формируется а лежит на диске чтоб кучу действий не делать програмнно + все настройки отдельно идут. А твой случай прокатывает - я так давно уже делаю но вот с шаблоном первый раз столкнулся. Те случай когда диаграмма уже существует и в ней заданы ряды. Нужно только указать сколько строк брать из листа данных. Вот это то и не проходит...



------------------
PS Недочитал тему до конца...
Ratings: 0 negative/0 positive
Re: Excel.Charts.SeriesCollection.XValues
Петров Андрей
Автор

Сообщений: 2506
Откуда: Химки (М.О.)
Дата регистрации: 17.04.2002
А не это я тупанул и недочитал. Пока с SetSourceData не пробовал...
Твой вариант отличается наличием волшебного слова Charts.Add() а у меня его нету. Попробуй сам через .WorkBooks.Open() а не Add()




------------------
PS Недочитал тему до конца...
Ratings: 0 negative/0 positive
Re: Excel.Charts.SeriesCollection.XValues
AleksM

Сообщений: 17881
Дата регистрации: 11.11.2003
А вот и с Open() и тоже без проблем. На первый лист пишу данные, на втором диаграмма пустышка, для которой переопределяю исходные параметры.
LOCAL loXls, loWorkbook, loWorkSheet, loChart
loXls = CREATEOBJECT("Excel.Application")
loXls.Visible = .T.
loWorkbook = loXls.Workbooks.Open(SYS(5)+SYS(2003)+"\ChartTest.xls")
loWorkbook.Sheets(1).Select
loWorkSheet=loWorkbook.Sheets(1)
loWorkSheet.Range("A1").Select
FOR i = 0 TO 14
loXls.ActiveCell.Offset(i,0)=DATE()+i
loXls.ActiveCell.Offset(i,1)=i
loXls.ActiveCell.Offset(i,2)=i*i
NEXT i
loWorkbook.Sheets(2).ChartObjects(1).Activate
loChart = loWorkbook.ActiveChart
WITH loChart
.SetSourceData(loWorkSheet.Range("B1:C15"), 2) && xlColumns
.SeriesCollection(1).XValues = loWorkSheet.Range("A1:A15")
.SeriesCollection(2).XValues = loWorkSheet.Range("A1:A15")
ENDWITH




------------------
Лучше переесть, чем недоспать.
Не спеши, а то успеешь.
Ratings: 0 negative/0 positive
Re: Excel.Charts.SeriesCollection.XValues
Петров Андрей
Автор

Сообщений: 2506
Откуда: Химки (М.О.)
Дата регистрации: 17.04.2002
Да этот вариант прокатил. Спасибо...




------------------
PS Недочитал тему до конца...
Ratings: 0 negative/0 positive
Re: Excel.Charts.SeriesCollection.XValues
AleksM

Сообщений: 17881
Дата регистрации: 11.11.2003
Андрей, у меня к тебе тоже вопрос
Черкни пару строк передачи данных в Excel через массив, раз у тебя это отлажено.




------------------
Лучше переесть, чем недоспать.
Не спеши, а то успеешь.
Ratings: 0 negative/0 positive
Re: Excel.Charts.SeriesCollection.XValues
Петров Андрей
Автор

Сообщений: 2506
Откуда: Химки (М.О.)
Дата регистрации: 17.04.2002
Вот как закидываю данные.

.Range('A8:I'+ALLTRIM(STR(m.c+7))).Value=thisform.GetArrPtr('a_repo')

А вот как формирую массив

SCAN
m.y=q_results.rez1
a_repo[m.x,1]=TTOC(q_results.dt,2)
a_repo[m.x,2]=0
a_repo[m.x,3]=q_results.p1_h_hi
a_repo[m.x,4]=q_results.p1_h_low
a_repo[m.x,5]=q_results.p1_l_hi
a_repo[m.x,6]=q_results.p1_h_low
a_repo[m.x,7]=m.y
a_repo[m.x,8]=IIF(q_results.h1=0,0,100)
a_repo[m.x,9]=IIF(q_results.l1=0,0,100)
m.miny=IIF(m.y<m.miny,m.y,m.miny)
m.maxy=IIF(m.y>m.maxy,m.y,m.maxy)
IF RECNO('q_results')=1
m.minx=a_repo[m.x,1]
ENDIF
IF RECNO('q_results')=RECCOUNT('q_results')
m.maxx=a_repo[m.x,1]
ENDIF
m.x=m.x+1
ENDSCAN




------------------
PS Недочитал тему до конца...
Ratings: 0 negative/0 positive
Re: Excel.Charts.SeriesCollection.XValues
Петров Андрей
Автор

Сообщений: 2506
Откуда: Химки (М.О.)
Дата регистрации: 17.04.2002
Метод прокатить то прокатил а вот все настройки он мне похерил. Те я настроил вид рядов после SetSourceData - вижу только один ряд вместо 3...




------------------
PS Недочитал тему до конца...
Ratings: 0 negative/0 positive
Re: Excel.Charts.SeriesCollection.XValues
AleksM

Сообщений: 17881
Дата регистрации: 11.11.2003
Спасибо. Ну и немного посоветую
Здесь
Цитата:
m.miny=IIF(m.y<m.miny,m.y,m.miny)
m.maxy=IIF(m.y>m.maxy,m.y,m.maxy)
вместо IIF можно MIN() & MAX()




------------------
Лучше переесть, чем недоспать.
Не спеши, а то успеешь.
Ratings: 0 negative/0 positive
Re: Excel.Charts.SeriesCollection.XValues
Петров Андрей
Автор

Сообщений: 2506
Откуда: Химки (М.О.)
Дата регистрации: 17.04.2002
Кажись начинает доходить. Короче переставил местами строки с XValues и Values и все прошло без всяких SetSourceData Вот код

WITH .charts(1)
.Axes(1).MajorUnit=.Axes(1).MinorUnit
.Axes(1).MinimumScale = m.minx
.Axes(1).MaximumScale = m.maxx
.Axes(2).MinimumScale = m.miny
.Axes(2).MaximumScale = m.maxy
m.r=.Axes(2).MajorUnit
.Axes(2).MinimumScale = (INT(m.miny/m.r)-1)*m.r
.Axes(2).MaximumScale = (INT(m.maxy/m.r)+1)*m.r
* .SetSourceData(m.oe.workbooks(1).sheets(3).Range("G8:G"+ALLTRIM(STR(m.c+7))), 2)
.SeriesCollection(1).Values = m.oe.workbooks(1).sheets(3).Range("G8:G"+ALLTRIM(STR(m.c+7)))
.SeriesCollection(1).XValues = m.oe.workbooks(1).sheets(3).Range("A8:A"+ALLTRIM(STR(m.c+7)))
ENDWITH

Похоже я допер. значений по X не может быть больше чем по Y а вот наоборот может...




------------------
PS Недочитал тему до конца...
Ratings: 0 negative/0 positive


Извините, но у вас нет прав для того, чтобы оставлять сообщения в этом форуме.

On-line: 11 (Гостей: 11)

© 2000-2024 Fox Club 
Яндекс.Метрика