写了一个把dataset导出到Excel的winform程序,点击导出就报错,下面是错误信息,谁帮我看看怎么回事?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了写了一个把dataset导出到Excel的winform程序,点击导出就报错,下面是错误信息,谁帮我看看怎么回事?相关的知识,希望对你有一定的参考价值。
有关调用实时(JIT)调试而不是此对话框的详细信息,
请参见此消息的结尾。
************** 异常文本 **************
System.IO.FileNotFoundException: 未能加载文件或程序集“Microsoft.Office.Interop.Excel, Version=10.0.4504.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35”或它的某一个依赖项。系统找不到指定的文件。
文件名:“Microsoft.Office.Interop.Excel, Version=10.0.4504.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35”
在 WindowsFormsApplication1.CreateExcel.Createexcel(DataTable dt, String fileName)
在 WindowsFormsApplication1.FormXs.button2_Click_1(Object sender, EventArgs e)
在 System.Windows.Forms.Control.OnClick(EventArgs e)
在 System.Windows.Forms.Button.OnClick(EventArgs e)
在 System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent)
在 System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
在 System.Windows.Forms.Control.WndProc(Message& m)
在 System.Windows.Forms.ButtonBase.WndProc(Message& m)
在 System.Windows.Forms.Button.WndProc(Message& m)
在 System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
在 System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
在 System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
警告: 程序集绑定日志记录被关闭。
要启用程序集绑定失败日志记录,请将注册表值 [HKLM\Software\Microsoft\Fusion!EnableLog] (DWORD)设置为 1。
注意: 会有一些与程序集绑定失败日志记录关联的性能损失。
要关闭此功能,请移除注册表值 [HKLM\Software\Microsoft\Fusion!EnableLog]。
程序里面引用了,F5启动调试没问题,但是到bin下面把exe文件拷出来直接运行就报这个错。
追答不能只拷贝一个exe 要整个debug文件夹拷贝出来 然后运行里面的exe
参考技术A 上的发生的DataSet导出Excel
1、添加引用
2、封装方法
using System; using System.Data; using System.IO; using NPOI.HSSF.UserModel; using NPOI.SS.UserModel; namespace Demo { /// <summary> /// Excel操作类 /// </summary> public class Excel { private readonly HSSFWorkbook workbook = null; private readonly DataSet dataSet = null; private readonly string excelFilename = string.Empty; private readonly ICellStyle cellDateTimeStyle = null; /// <summary> /// Excel操作类构造函数 /// </summary> /// <param name="dataSet"></param> /// <param name="excelFilename"></param> public Excel(DataSet dataSet, string excelFilename) { this.dataSet = dataSet; this.excelFilename = excelFilename; workbook = new HSSFWorkbook(); IDataFormat iDataFormat = workbook.CreateDataFormat(); //设置一个DateTime单元格的样式 cellDateTimeStyle = workbook.CreateCellStyle(); cellDateTimeStyle.DataFormat = iDataFormat.GetFormat("yyyy-m-d h:mm:ss"); } /// <summary> /// 生成excel /// </summary> /// <returns></returns> public bool Write() { bool returns = false; using (FileStream saveFile = new FileStream(excelFilename, FileMode.Create, FileAccess.ReadWrite)) { WriteExcelFile(dataSet); workbook.Write(saveFile); returns = true; } return returns; } private void WriteExcelFile(DataSet ds) { foreach (DataTable dt in ds.Tables) { ISheet sheet = workbook.CreateSheet(dt.TableName); WriteDataTableToExcelWorksheet(dt, sheet); } } private void WriteDataTableToExcelWorksheet(DataTable dt, ISheet sheet) { //生成sheet第一行列名 IRow row = sheet.CreateRow(0); for (int i = 0; i < dt.Columns.Count; i++) { ICell cell = row.CreateCell(i); cell.SetCellValue(dt.Columns[i].Caption); } //写入数据 for (int i = 0; i < dt.Rows.Count; i++) { IRow rows = sheet.CreateRow(i + 1); for (int j = 0; j < dt.Columns.Count; j++) { ICell cell = rows.CreateCell(j); var cellValue = dt.Rows[i][j]; if (cellValue == DBNull.Value) { continue; } //类型判断处理 var type = cellValue.GetType(); var typeName = type.Name.ToLower(); switch (typeName) { case "int32": cell.SetCellValue(double.Parse(cellValue.ToString())); break; case "string": cell.SetCellValue(cellValue.ToString()); break; case "datetime": cell.CellStyle = cellDateTimeStyle; cell.SetCellValue(DateTime.Parse(cellValue.ToString())); break; case "guid": cell.SetCellValue(cellValue.ToString()); break; case "boolean": cell.SetCellValue(bool.Parse(cellValue.ToString())); break; default: throw new Exception(string.Format("类型:{0}未做处理,请自行添加", typeName)); } } } } } }
3、实际应用
using System; using System.Data; namespace Demo { class Program { static void Main(string[] args) { DataSet dataSet = new DataSet(); DataTable dataTable = new DataTable(); dataTable.TableName = "Demo"; dataTable.Columns.Add("Id", typeof(int)); dataTable.Columns.Add("名称", typeof(string)); dataTable.Columns.Add("年龄", typeof(int)); dataTable.Columns.Add("添加日期", typeof(DateTime)); for (int i = 0; i < 1000; i++) { dataTable.Rows.Add(i, "名称demo" + i, 18, DateTime.Now); } dataSet.Tables.Add(dataTable); Excel excel = new Excel(dataSet, "Demo.xls"); excel.Write(); } } }
以上是关于写了一个把dataset导出到Excel的winform程序,点击导出就报错,下面是错误信息,谁帮我看看怎么回事?的主要内容,如果未能解决你的问题,请参考以下文章