此时会添加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;
}
}
}