c#操作word图表(二)

c#操作word图表(excel)

这一篇是对上一篇操作word类文章的补充,上一篇是通过Microsoft.Office.Interop.Graph插入图表,但样式稍差,这次是通过调用excel来插入图表,所以运行过程中在在进程管理中会发现出现excel进程,由于代码量较多,这次只贴出关键代码,具体的其他代码请查看上一篇
首先引入Microsoft.Office.Interop.Word和Microsoft.Office.Interop.Excel
设置图表类型:
 object oClassType = "Excel.Chart.8";
oShape = wrdRng.InlineShapes.AddOLEObject(ref oClassType, ref oMissing,

                    ref oMissing, ref oMissing, ref oMissing,

                    ref oMissing, ref oMissing, ref oMissing);
接着设置数据源并且指定取值范围:
System.Data.DataTable table = data.Tables[0];

                    for (int i = 1; i <= table.Rows.Count + 1; i++)
                    {
                        for (int j = 1; j <= table.Columns.Count; j++)
                        {
                            if (i == 1 && j != 1)
                            {
                                dataSheet.Cells[j, i] = table.Columns[j - 1].ColumnName;
                            }
                            else
                            {
                                if (!(i == 1 && j == 1))
                                {
                                    dataSheet.Cells[j, i] = table.Rows[i - 2][j - 1];
                                }
                            }
                        }
                    }

                    //设置取值范围

                    oShape.OLEFormat.Object.ActiveChart.SetSourceData(dataSheet.Range[dataSheet.Cells[1, 1], dataSheet.Cells[table.Columns.Count, table.Rows.Count + 1]], Microsoft.Office.Interop.Excel.XlRowCol.xlColumns);

                    dataSheet.Columns.AutoFit();
取值范围的设置的必须的,否则会按照默认的行列进行取值,也就是说会无视数据源的行列数量按照默认的行列进行取值,导致图表显示异常,而且必须注意的是插入这个类型的图表时跟上一篇提到的通过Microsoft.Office.Interop.Graph插入图表时数据源的赋值方式有所不同,仔细观察代码的童鞋会发现这一次的数据行和列颠倒过来了,必须把datatable的列作为数据源的行,不然出来的图表也会出错。
最后,关闭并且保存
object saveOption = Word.WdSaveOptions.wdSaveChanges;

                    oWord.Quit(ref saveOption, Type.Missing, Type.Missing);
但是这种方法插入图表时,效率比较低,并且有一个问题至今仍问解决,本人冥想数日至今无果,甚是无奈。问题在于将word的界面设置为可见状态时,插入的图表没有任何问题,但是当word的界面设置为不可见,即隐藏时,问题就出来了,显示的图表只有一小角,但是双击之后又能完全显示,但却不知原因是什么,跪求高人解答,最后附上两种不同操作方式产生的图表的截图



猜你喜欢

转载自blog.csdn.net/xiaomingelv/article/details/17198565