写了一个把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]。

引用 Interop.Excel.dll 这个dll了吗追问

程序里面引用了,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程序,点击导出就报错,下面是错误信息,谁帮我看看怎么回事?的主要内容,如果未能解决你的问题,请参考以下文章

C#winform中如何把表导出到EXCEL

想问下。C#中怎么把List集合转为DataSet。

C#程序,将数据从dataset导出到excel表格里的时间类型为啥显示成“#”号呢

NPOI DataSet导出excel

请教java导出多张图片到Excel问题!

求将dataset数据集导出到excel文件的方法(vs2005 c#)