`
ronon
  • 浏览: 192804 次
  • 性别: Icon_minigender_2
  • 来自: 武汉
社区版块
存档分类
最新评论

WinForm导出DataSet到Excel

    博客分类:
  • .net
阅读更多
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.IO;
using System.Collections;
using System.Data.SqlClient;
using Microsoft.Office.Core;
using System.Diagnostics;
using System.Reflection;
using Microsoft.Office.Interop.Excel;

//添加引用-->COM-->Microsoft Excel 12.0 Object Library

namespace TestExcel
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        private static string connStr = "User Id=sa;Password=123456;Data Source=.;Initial Catalog=TDRDB;";

       

        //查询产品
        public static List<Object> getProducList()
        {
            SqlConnection conn = null;
            List<Object> producList = new List<Object>();
            string sqlStr = string.Format("select * from production order by type");
          
            try
            {
                using (conn = new SqlConnection(connStr))
                {
                    conn.Open();
                    SqlCommand cmd = new SqlCommand(sqlStr, conn);
                    SqlDataReader dr = cmd.ExecuteReader();
                    while (dr.Read())
                    {
                        Production p = new Production();
                        p.Id = int.Parse(Convert.ToString(dr["ID"]));
                        p.Name = Convert.ToString(dr["name"]);
                        p.Type = Convert.ToString(dr["type"]);
                        p.Pic = Convert.ToString(dr["pic"]);
                        p.NetPrice = Double.Parse(Convert.ToString(dr["netPrice"]));
                        p.GrossPrice = Double.Parse(Convert.ToString(dr["grossPrice"]));
                        p.Mark = Convert.ToString(dr["mark"]);
                        producList.Add(p);
                    }

                }
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }
            finally
            {
                conn.Close();
                conn.Dispose();
            }
            return producList;

        }
        private void button1_Click(object sender, EventArgs e)
        {

            DataSet ds = new DataSet();
            System.Data.DataTable dt = new System.Data.DataTable();
            dt.Columns.AddRange(new DataColumn[] { new DataColumn("编号"), new DataColumn("名称"), new DataColumn("型号"), new DataColumn("图片"), new DataColumn("净价"), new DataColumn("毛价"), new DataColumn("备注"), });
            for (int i = 0; i < getProducList().Count; i++)
            {
                Production produc=(Production)getProducList()[i];
                String[] rows = new String[] { produc.Id.ToString(), produc.Name, produc.Type, produc.Pic, produc.NetPrice.ToString(), produc.GrossPrice.ToString(), produc.Mark };
                dt.Rows.Add(rows);
            }
            ds.Tables.Add(dt);
            ExportToExcel(ds, "D:\\产品信息");

        }


        public static void ExportToExcel(DataSet dataSet, string fileName)
        {

           
            //Excel程序
            Microsoft.Office.Interop.Excel.Application excelApplication = new Microsoft.Office.Interop.Excel.Application();
            excelApplication.DisplayAlerts = false;
            //工作簿
            Workbook workbook = excelApplication.Workbooks.Add(Missing.Value);
            //上一个工作簿
            Worksheet lastWorksheet = (Worksheet)workbook.Worksheets.get_Item(workbook.Worksheets.Count);
            //空白工作簿
            Worksheet newSheet = (Worksheet)workbook.Worksheets.Add(Type.Missing, lastWorksheet, Type.Missing, Type.Missing);

            foreach (System.Data.DataTable dt in dataSet.Tables)
            {
                newSheet.Name = dt.TableName;

                for (int col = 0; col < dt.Columns.Count; col++)
                {
                    newSheet.Cells[1, col + 1] = dt.Columns[col].ColumnName;
                }
                for (int row = 0; row < dt.Rows.Count; row++)
                {
                    for (int col = 0; col < dt.Columns.Count; col++)
                    {
                        newSheet.Cells[row + 2, col + 1] = dt.Rows[row][col].ToString();
                    }
                }
            }

            try
            {
                newSheet.Cells.Font.Size = 12;
                ((Microsoft.Office.Interop.Excel.Worksheet)workbook.Worksheets.get_Item(1)).Delete();
                ((Microsoft.Office.Interop.Excel.Worksheet)workbook.Worksheets.get_Item(1)).Delete();
                ((Microsoft.Office.Interop.Excel.Worksheet)workbook.Worksheets.get_Item(1)).Delete();
                //((Microsoft.Office.Interop.Excel.Worksheet)workbook.Worksheets.get_Item(1)).Activate();
                workbook.Close(true, fileName, System.Reflection.Missing.Value);
                MessageBox.Show("成功导出Excel,请查看!", "信息提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
                return;
            }
            catch (Exception e)
            {
                throw e;
            }
            finally
            {
                excelApplication.Quit();
                Process[] excelProcesses = Process.GetProcessesByName("EXCEL");
                DateTime startTime = new DateTime();

                int processId = 0;
                for (int i = 0; i < excelProcesses.Length; i++)
                {
                    if (startTime < excelProcesses[i].StartTime)
                    {
                        startTime = excelProcesses[i].StartTime;
                        processId = i;
                    }
                }

                if (excelProcesses[processId].HasExited == false)
                {
                    excelProcesses[processId].Kill();
                }
            }

        }


    }
}

分享到:
评论
2 楼 wei_cao 2012-09-05  
这是咋回事列?
1 楼 wei_cao 2012-09-05  
無法將型別 'System.__ComObject' 的 COM 物件轉換為介面型別 'Microsoft.Office.Interop.Excel.Application'。由於發生下列錯誤,介面 (IID 為 '{000208D5-0000-0000-C000-000000000046}') 之 COM 元件上的 QueryInterface 呼叫失敗而導致作業失敗: 程式庫未登錄。 (發生例外狀況於 HRESULT: 0x8002801D (TYPE_E_LIBNOTREGISTERED))

相关推荐

    WinForm下DataSet 导出

    在Windows Forms (WinForm) 应用程序开发中,经常需要将数据集(DataSet)中的数据导出到Excel文件中,以便于进一步的数据分析或共享。本文将详细介绍如何在WinForm应用程序中实现DataSet数据的高效导出至Excel文件...

    C# Winform实现导入和导出Excel文件

    本文实例为大家分享了Winform实现导入导出Excel文件的具体代码,供大家参考,具体内容如下 /// /// 导出Excel文件 /// /// /// &lt;param name=dataSet&gt; /// 数据集 /// 导出后是否打开文件 /// &lt;returns&gt;&lt;/...

    WinForm导出文件为Word、Excel、文本文件的方法

    4. **导出DataSet到Excel**: - `SaveAsExcel`方法还有另一个重载版本,接收一个`DataSet`对象。这个方法创建`SaveAsExcelSetFile`线程,它遍历数据集中每个表,创建单独的工作表并写入数据。 这些方法都设置了...

    WinForm中DataGridView导出成Excel

    ### WinForm中DataGridView导出成Excel 在.NET框架下的Windows应用程序(WinForm)开发中,经常需要处理数据的导入导出工作。其中,将DataGridView中的数据导出到Excel是一种非常常见的需求。本篇文章将详细解释...

    winform导出PGSQL表结构

    在.NET Framework 4.5.1环境下,使用C#开发WinForm应用程序来导出PostgreSQL(简称PGSQL)数据库的表结构信息至Excel文件是一项常见的数据处理任务。这个任务涉及了几个关键的技术点,包括数据库连接、数据查询、...

    C# WinForm导出Excel方法介绍

    在.NET应用程序,特别是C# WinForm环境中,导出数据到Excel是常见的功能需求。本文将主要探讨两种常用的方法:Office Primary Interop Assemblies (PIA) 和 文件流。这两种方法都可以帮助开发人员创建和写入Excel...

    WinForm显示数据库Excel并导出和分页

    本项目涉及的核心技术是将数据库中的数据展示在WinForm上,并提供Excel导出功能以及分页操作。下面我们将详细探讨这些知识点。 首先,**显示数据库**是WinForm应用中的常见需求。通常,我们会使用ADO.NET(微软的...

    c# WinForm Excel考勤数据融合系统 Excel导入导出源代码

    直接将DataTable或DataSet导出成excel (2). 使用模板将DataTable或DataSet导出成excel (3). 使用模板将泛型List导出成excel (4). 直接使用模板去数据库里面根据sql语句导出成excel (5). 用的时候需要注意以下几点,...

    WinForm报表导入导出操作(Access版)

    在“WinForm报表导入导出操作(Access版)”这个项目中,主要涉及了与Microsoft Access数据库的交互,包括Excel数据的导入、查询以及数据的导出。以下是对这些知识点的详细说明: 1. Excel数据导入Access: 在...

    winform导入Excel.xls

    在.NET开发环境中,WinForm应用程序经常需要处理与Excel数据的交互,例如导入Excel数据到DataGridview控件中展示,或者进一步将数据存入SQL Server数据库。本篇将详细讲解如何使用C#语言实现这个过程。 首先,我们...

    C# WINFORM 操作Sql Server 数据库,xls csv txt 导入导出

    本教程将重点关注如何在C#的WinForm应用中操作SQL Server数据库,并实现Excel(xls)、CSV和TXT文件的导入导出功能。这在数据处理、报表生成以及数据交换等场景中非常实用。 首先,要与SQL Server进行交互,你需要...

    C#_WinForm_dataGridView_全选_反选_单选_导出

    C#的WinForm项目的dataGridView控件的CheckBox的全选、全不选、反选、单选、导出全部、仅导出已选择的项目到Excel的功能。简单明了,一看就懂。 我的腾讯微博:http://t.qq.com/djk8888

    NPOI操作实例C# ExcelToDataTable DataTableToExcel

    这个“NPOI操作实例C# ExcelToDataTable DataTableToExcel”是一个很好的学习资源,它展示了如何在C# WinForm应用程序中利用NPOI库进行数据转换,包括将Excel文件读取到DataTable,以及将DataTable的数据写入到Excel...

    WinForm程序RDLC报表

    在RDLC中,可以通过数据集(Dataset)连接到各种数据源,如SQL Server、Oracle、Excel等,动态加载数据到报表。 3. **数据绑定:** 数据字段与报表元素绑定,将数据库中的字段值显示在报表上。可以动态定义绑定方式...

    C#读取导入Excel值为空解决方法

    在日常工作中,我们经常需要处理Excel文件,尤其是在企业级应用中,Excel文件的导入导出是非常常见的需求之一。而在使用C#进行Excel数据读取时,可能会遇到一些单元格值为空的情况,这会直接影响到后续的数据处理...

    c# Winform企业管理系统

    开发者可能会使用ADO.NET进行数据库操作,通过 SqlConnection、SqlCommand、DataSet 和 DataTable 等类与SQL Server或其它数据库进行通信。业务逻辑层通常包含对员工信息、考勤、薪资等数据的处理,这些操作可能封装...

    C#Winform做的酒店管理系统

    8. **报表生成**:为了便于管理和决策,系统可能需要生成各种报表,如入住率报告、收入报告等,这可能需要第三方库如Crystal Reports或自定义的Excel导出功能。 9. **事务处理**:在处理敏感操作如预订、退房等时,...

    学习 office

    这里主要讨论如何利用数据集作为数据源在 WinForm 应用程序中导出到 Excel,这是一个基础级别的 Office 应用技巧。 首先,你需要确保目标计算机已经安装了 Office 工具,特别是 Excel,因为我们需要使用到它的交互...

    【ASP.NET编程知识】ADO.Net 类型化DataSet的简单介绍.docx

    - 导出到Excel:通过DataSet,可以方便地将数据导出为Excel格式,方便数据交换。 - XML序列化:使用`DataSet.WriteXml(String)`和`WriteXml(Stream)`方法,可以将数据保存为XML格式,便于存储和传输。 总之,ADO...

Global site tag (gtag.js) - Google Analytics