主题:以下代码总是出错,大师们知道咋整不?(关于EXCEL的)
			 海军
				 [专家分:5350]  发布于 2007-08-21 17:54:00
 海军
				 [专家分:5350]  发布于 2007-08-21 17:54:00							
			eole.Charts.Add                          && 添加一个图形对象,准备绘图
eole.ActiveChart.Location(1,"Sheet1")    && 生成的图形内嵌于指定工作表。2:表示内嵌;1:表示图形单列不内嵌
[color=FF0000]上面这句就出错:OLE错误码0X800a03ec:未知的com状态代码.下面各句也常出错误,并且每次出错的地方和错误名称还不一定一样,各位大师知道是什么原因不?怎么调整呀?谢谢!![/color]
eole.ActiveChart.SetSourceData(xlsheet.Range(fanwei),2)    && 指定绘图数据源。其中的2表示数据是按列摆放;2表示按行摆放
eole.ActiveChart.Location Where:=1
*-------------------------------------------------------------------------------------------------
eole.ActiveChart.ChartType = 51  &&54为3D柱图    73 为折线           && 非立体折线图
*-------------------------------------------------------------------------------------------------
eole.ActiveChart.HasLegend=.T.                && 不显示图例
If Thisform.pageframe1.page3.check1.Value=1
    eole.ActiveChart.ChartTitle.Characters.Text =Alltrim(Thisform.pageframe1.page2.combo1.DisplayValue)+"日经营情况统计图"
Else
    eole.ActiveChart.ChartTitle.Characters.Text =Alltrim(Thisform.pageframe1.page3.combo1.DisplayValue)+Alltrim(Thisform.pageframe1.page2.combo1.DisplayValue)+"日经营情况统计图"
Endif
						
					 
		
			
回复列表 (共20个回复)
		
								
				沙发
				
					 海军 [专家分:5350]  发布于 2007-08-21 18:12:00
海军 [专家分:5350]  发布于 2007-08-21 18:12:00				
				为了让大家容易看明白,我将以上程序简化一下:
eole.Charts.Add                          && 添加一个图形对象,准备绘图
eole.ActiveChart.Location(1,"Sheet1")    && 生成的图形内嵌于指定工作表。2:表示内嵌;1:表示图形单列不内嵌
eole.ActiveChart.SetSourceData(xlsheet.Range(A1:B8),2)    && 指定绘图数据源。其中的2表示数据是按列摆放;2表示按行摆放
*-------------------------------------------------------------------------------------------------
eole.ActiveChart.ChartType = 51  &&54为3D柱图    73 为折线           && 非立体折线图
*-------------------------------------------------------------------------------------------------
eole.ActiveChart.HasLegend=.T.                && 不显示图例
    eole.ActiveChart.ChartTitle.Characters.Text ="日经营情况统计图"
							 
						
				板凳
				
					 moz [专家分:37620]  发布于 2007-08-21 21:23:00
moz [专家分:37620]  发布于 2007-08-21 21:23:00				
				"Sheet1" 改成 eols.sheets("Sheet1") 看行不行,
其实我多次在EXCEL里加入图片对象时都会出错,
在VFP里好像不知道指的是哪个图片对象,
而在EXCEL里却不会出现问题.不明白具体原因.
							 
						
				3 楼
				
					 海军 [专家分:5350]  发布于 2007-08-21 21:51:00
海军 [专家分:5350]  发布于 2007-08-21 21:51:00				
				谢谢。还是出错:OLE 错误码 0x80070057:The parameter is incorrect
(参数是不正确的)
							 
						
				4 楼
				
					 moz [专家分:37620]  发布于 2007-08-21 22:35:00
moz [专家分:37620]  发布于 2007-08-21 22:35:00				
				关于[color=ff00ff]&& 生成的图形内嵌于指定工作表。2:表示内嵌;1:表示图形单列不内嵌[/color]
我看了一下帮助,
1  应该是新建表,后面一个参数是新建的表名
2  应该是已有表,后面一个参数是必选,是现有的表名
假如你的表Sheet1是已经存在的话,应该把1改成2,否则新建一个跟已存在的表Sheet1同名的表,是会出错的.
不把1改2,那就应该把表名 Sheet1 改成不与其他表同名的其他表名看看.
以上纯属个人猜测,本人不负任何责任,别乱扣帽子,也不需要鸡蛋和西红柿.
							 
						
				5 楼
				
					 海军 [专家分:5350]  发布于 2007-08-22 00:14:00
海军 [专家分:5350]  发布于 2007-08-22 00:14:00				
				谢谢moz老师。我将这个参数删除,问题解决。
后面还有很多报错的地方,先不去管了,主要功能实现了,就可以了。以后有时间再解决吧。
							 
						
				6 楼
				
					 cbl518 [专家分:57140]  发布于 2007-08-22 05:49:00
cbl518 [专家分:57140]  发布于 2007-08-22 05:49:00				
				Eol=CREATEOBJECT('Excel.Application')
WITH Eol
.WorkBooks.Add             &&新建工作簿
.SheetsInNewWorkbook=2     &&建立 2 个空工作表
*** 在第一个工作表中设计图表需要的数据
WITH .Worksheets("Sheet1")
.activate
&&给单元格赋值的形式:(第一列是:X轴数据;第二列是:Y轴数据)
.cells(1,1).value='综合' 
.cells(2,1).value='电脑'
.cells(3,1).value='技术'
.cells(4,1).value='网络'
.cells(5,1).value='软件
.cells(1,2).value=5000
.cells(2,2).value=4000
.cells(3,2).value=3000
.cells(4,2).value=6000
.cells(5,2).value=2000
ENDWITH 
***以下是作图部分:
.Charts.Add   && 添加一个绘图对象
WITH .ActiveChart
* 标题系列:
.HasTitle = .T.
.ChartTitle.Characters.Text = "日经营情况统计图"
.Axes(1, 1).HasTitle = .T.
.Axes(1, 1).AxisTitle.Characters.Text = "x轴说明"
.Axes(2, 1).HasTitle = .T.
.Axes(2, 1).AxisTitle.Characters.Text = "Y轴说明"
.HasLegend=.F.    && 不显示图例
*** 指定数据所在的工作表和数据范围:
.SetSourceData( Eol.workSheets("Sheet1").Range("A1:B5"),2) && 绘图数据源
.Location(2,"Sheet2")      && 将图表转移到指定的第二个工作表中。
ENDWITH
.ActiveChart.ChartType=51  && 指定绘图类型
.Visible=.T.
***删除vfp中的对象。
Eol=.null.
RELEASE Eol
ENDWITH
							 
						
				7 楼
				
					 cbl518 [专家分:57140]  发布于 2007-08-22 05:58:00
cbl518 [专家分:57140]  发布于 2007-08-22 05:58:00				
				由于我理解不清你的说明,不知道你需要哪些功能!
所以按你 2楼的解释作图。
如果要其它的功能,你只要详细说明就行,不必附代码。
我建议你直接在 vfp 中,调用该作图对象的控件。
该控件带有打印的功能。
							 
						
				8 楼
				
					 海军 [专家分:5350]  发布于 2007-08-22 11:53:00
海军 [专家分:5350]  发布于 2007-08-22 11:53:00				
				十分感谢cbl518老师的耐心解答,您是我学习的榜样.
以上问题经您讲解清楚了很多.主要问题已解决.再次表示感谢.
还有一些设置颜色\位置等语句,常出错,不知道什么原因.比如:
With aole.ActiveChart    &&以下关于图表标题操作,自定义名,颜色,字体大小,粗体。
.IncrementLeft="-48.75"
Endwith
With aole.Selection
        .MarkerBackgroundColorIndex = 2
        .MarkerForegroundColorIndex = 1
        .MarkerStyle = 4
        .Smooth = .T.
        .MarkerSize = 3
        .Shadow = .F.
    Endwith
等,不过已无大碍.
关于,使用图表控件问题,我认为我还是先用EXCEL吧.这样用户可以保存,可以打印,可以看到数据表.虽然不够专业,但感觉比用控件友好些.再者,我对这个控件不是很了解,还要从头学起.
我的软件没有用报表,所有表格都是用的EXCEL,感觉还算可以,就是速度太慢了.不知大师们有什么看法.
							 
						
				9 楼
				
					 cbl518 [专家分:57140]  发布于 2007-08-22 16:36:00
cbl518 [专家分:57140]  发布于 2007-08-22 16:36:00				
				***以下是作图部分:
.Charts.Add   && 添加一个图形对象
WITH .ActiveChart
* 标题系列:
.HasTitle = .T.
WITH .ChartTitle
.Characters.Text = "标题"
.Interior.ColorIndex = 7        && 背景区域颜色
.AutoScaleFont = .T.            && 对象内文本随对象大小,而改变字体大小
WITH .Characters.Font           && 标题字体对象
  .Name = "楷体_GB2312"
  .FontStyle = "加粗"
  .Size = 22
  .Strikethrough = .F.          && 删除线
  .ColorIndex = 5               && 字体颜色索引号
ENDWITH
ENDWITH
.HasDataTable = .T.             && 显示数据表
.DataTable.ShowLegendKey = .T.  && 显示图例标志
.Axes(1, 1).HasTitle = .T.
.Axes(1, 1).AxisTitle.Characters.Text = "x轴说明"
.Axes(2, 1).HasTitle = .T.
.Axes(2, 1).AxisTitle.Characters.Text = "Y轴说明"
.HasLegend=.F.             && 不显示图例
.SetSourceData( Eol.workSheets("Sheet1").Range("A1:B5"),2) && 绘图数据来源
.Location(2,"Sheet2")      && 将图表转移到指定的工作表中。
ENDWITH
.ActiveChart.ChartType=51  && 指定绘图类型
.Visible=.T.
Eol=.NULL.
RELEASE Eol
ENDWITH
							 
						
				10 楼
				
					 lwh1188 [专家分:25840]  发布于 2007-08-22 22:58:00
lwh1188 [专家分:25840]  发布于 2007-08-22 22:58:00				
				还是cbl518答得精彩!还那句话---实在是高!
							 
									
			
我来回复