记录一些经验

学习,生活

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

用C#以编程方式生成Excel图表.

一需要添加一个Excel 的COM组件,

add reference-->com-->Microsoft Excel Object 11.0-->Add

此时会添加3个reference:Excel; Microsoft.Office.Core; VBIDE
在文件最上面添加如下using 语句
 
using System.Reflection;
using System.Runtime.InteropServices;
using Excel = Microsoft.Office.Interop.Excel;

 
这样就保证了.net Framework可以调用Excel 的com组件,在本人机器上测试一切正常,图表正常生成,但是当朋友在她的电脑上解压缩文件后编译运行,点击这个生成图表的按钮,出现FileNotFound Exception。我重新将所有连接以及连接字符串在form_load Reset,编译运行,没有出现错误。朋友的电脑上重新编译运行,错误依然存在。
 
仔细查看exception,发现有可能是office2003缺少相关dll文件造成,查看msdn,得知是office缺少主互操作程序集(PIA)。在朋友电脑上做如下操作:
 

安装 Office 主互操作程序集

1.               控制面板中,选择添加或删除程序

2.               目前安装的程序列表中,选择 Microsoft Office

3.               单击更改

4.               选择添加或删除功能,然后单击下一步

5.               选择选择高级应用程序自定义,然后单击下一步

6.               展开“Microsoft Excel for Windows”,单击“.NET 可编程性支持旁边的框,然后单击从本机运行

7.               展开“Microsoft Word for Windows”,单击“.NET 可编程性支持旁边的框,然后单击从本机运行

8.               展开“Office 工具,单击“Microsoft Forms 2.0 .NET 可编程性支持旁边的框,然后单击从本机运行

9.    “Office 工具下,展开“Microsoft Graph”,单击“.NET 可编程性支持旁边的框,然后单击从本机运行

10.           按照同样的过程,为所需的任何其他 Office 应用程序安装主互操作程序集。

11.           单击更新

主互操作程序集随即安装在全局程序集缓存 (GAC) 中。

再次编译运行,在她的电脑上程序也可以正常运行了。附一段C#里面生成Excel图表的源代码。

 

private void button1_Click(object sender, EventArgs e)
        {
            Excel.Application xlApp;   
            Excel.Workbook xlBook;
            Excel.Workbooks xlBooks;
            Excel.Range xlRange ;
            Excel.Sheets xlsheets;
            Excel.Worksheet xlSheet;
            try
            {
                xlApp = new Excel.Application();
                xlBooks = xlApp.Workbooks;
                xlBook = xlBooks.Add(Missing.Value);
                xlsheets = xlBook.Worksheets;
                xlSheet = (Excel.Worksheet)xlsheets.get_Item(1);
                // xlApp.DisplayAlerts = false;
                // create cell header
                object[] objHeaders = { "Count", "num1", "num2", "num3", "num4" };
                // set header text
                xlRange = xlSheet.get_Range("A1", "E1");
                xlRange.set_Value(Missing.Value, objHeaders);
                xlRange.Font.Bold = true;
                xlRange.Font.Name = "Verdana";
                xlRange.Font.Size = 10;
                xlRange.HorizontalAlignment = Excel.XlHAlign.xlHAlignCenter;
                for (int i = 0; i < 13; i++)
                {
                    xlSheet.Cells[2 + i, 1] = i;
                    xlSheet.Cells[2 + i, 2] = i+1;
                    xlSheet.Cells[2 + i, 3] = i+2;
                    xlSheet.Cells[2 + i, 4] = i+3;
                    xlSheet.Cells[2 + i, 5] = i+4;
                }
                Excel.Chart xlChart = (Excel.Chart)xlBook.Charts.Add(Missing.Value, Missing.Value, Missing.Value, Missing.Value);
                Excel.Range chartRage = xlSheet.get_Range("A1:A14", "B1:E14");
                xlChart.ChartWizard(chartRage, Excel.XlChartType.xl3DColumn, Missing.Value, Excel.XlRowCol.xlColumns, 1, 1, true, "实验室效率分析", "上机时间", "上机次数", Missing.Value);
                xlBook.SaveAs(Application.StartupPath + "\\Analysis.xls", Missing.Value,
                    Missing.Value, Missing.Value, Missing.Value, Missing.Value,
                    Excel.XlSaveAsAccessMode.xlNoChange, Missing.Value, Missing.Value,
                    Missing.Value, Missing.Value, Missing.Value);
                xlBook.Close(false, Missing.Value, Missing.Value);
                MessageBox.Show("Excel chart created under: \n" + Application.StartupPath + "\\Analysis.xls", "Confirm", MessageBoxButtons.OK);
            }
            catch (Exception ec)
            {
                MessageBox.Show(ec.ToString());
            }
            finally
            {
                xlRange = null;
                xlSheet = null;
                xlBook = null;
                xlApp = null;
            }

        }
        }

发表于: 2007-04-20,修改于: 2007-04-20 18:10,已浏览1181次,有评论1条 推荐 投诉
posted on 2008-06-08 20:49  将飞  阅读(2121)  评论(1)    收藏  举报