C# winform窗體導出數據到excel


數據是從access數據庫中讀取的。

點擊導出按鈕

去目錄下找到對應的文件

代碼:

using System;
using System.Collections;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace WindowsFormsApp1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            DataTable dt = new DataTable();
            dt.Columns.Add("aa");
            dt.Columns.Add("bb");
            DataRow dr = dt.NewRow();
            dr[0] = "111";
            dr[1] = "222";
            dt.Rows.Add(dr);

            string path = AppDomain.CurrentDomain.BaseDirectory + @"" + DateTime.Now.ToString("yyyyMMddHHmmss") + ".csv";
            if (dt2csv(dt, path, "圖書信息", "編號,書名,作者,出版社"))
            {
                MessageBox.Show("導出成功,文件位置:" + path);
            }
            else
            {
                MessageBox.Show("導出失敗");
            }

        }
        /// <summary>
        /// 導出報表為Csv
        /// </summary>
        /// <param name="dt">DataTable</param>
        /// <param name="strFilePath">物理路徑</param>
        /// <param name="tableheader">表頭</param>
        /// <param name="columname">字段標題,逗號分隔</param>
        public static bool dt2csv(DataTable dt, string strFilePath, string tableheader, string columname)
        {
            try
            {
                string strBufferLine = "";
                StreamWriter strmWriterObj = new StreamWriter(strFilePath, false, System.Text.Encoding.UTF8);
                strmWriterObj.WriteLine(tableheader);
                strmWriterObj.WriteLine(columname);
                for (int i = 0; i < dt.Rows.Count; i++)
                {
                    strBufferLine = "";
                    for (int j = 0; j < dt.Columns.Count; j++)
                    {
                        if (j > 0)
                            strBufferLine += ",";
                        strBufferLine += dt.Rows[i][j].ToString();
                    }
                    strmWriterObj.WriteLine(strBufferLine);
                }
                strmWriterObj.Close();
                return true;
            }
            catch
            {
                return false;
            }
        }

        /// <summary>
        /// List轉DataTable
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="collection"></param>
        /// <returns></returns>
        public static DataTable ToDataTable<T>(IEnumerable<T> collection)
        {
            var props = typeof(T).GetProperties();
            var dt = new DataTable();
            dt.Columns.AddRange(props.Select(p => new DataColumn(p.Name, p.PropertyType)).ToArray());
            if (collection.Count() > 0)
            {
                for (int i = 0; i < collection.Count(); i++)
                {
                    ArrayList tempList = new ArrayList();
                    foreach (PropertyInfo pi in props)
                    {
                        object obj = pi.GetValue(collection.ElementAt(i), null);
                        tempList.Add(obj);
                    }
                    object[] array = tempList.ToArray();
                    dt.LoadDataRow(array, true);
                }
            }
            return dt;
        }
    }
}

 

 連接access數據庫有可能會報錯:未在本地計算機上注冊“Microsoft.Jet.OLEDB.4.0”提供程序

win7或win8 64位下調試程序,出現這樣的錯誤提示:未在本地計算機上注冊 Microsoft.Jet.OLEDB.4.0 提供程序

解決方法如下:

方法一:“設置應用程序池默認屬性”/“常規”/”啟用32位應用程序”,設置為 true。 

方法二:生成->配置管理器->平台->點擊Any Cpu選項卡->新建->新建平台->X86。

源碼下載連接包含access數據庫文件:https://download.csdn.net/download/u012408847/10933670


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM