C#讀取Excel文件(.xls .xlsx)


using System;
using System.Data;
using System.Drawing;
using System.IO;
using System.Windows.Forms;
using ExcelDataReader;

namespace ReadExcel
{
    /// <summary>
    ///     C#讀取Excel文件(.xls .xlsx)
    ///     LDH @ 2021-7-28
    ///     Nuget: ExcelDataReader ExcelDataReader.DataSet
    /// </summary>
    public partial class FrmMain : Form
    {
        private DataTableCollection _tableCollection;

        public FrmMain()
        {
            InitializeComponent();
        }

        /// <summary>
        ///     打開Excel表格,支持 .xlsx .xls 兩種格式
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnBrowse_Click(object sender, EventArgs e)
        {
            using (var openFileDialog = new OpenFileDialog {Filter = @"Excel表格|*.xlsx|Excel|*.xls"})
            {
                if (openFileDialog.ShowDialog() == DialogResult.OK)
                {
                    txtFileName.Text = openFileDialog.FileName;

                    using (var stream = File.Open(openFileDialog.FileName, FileMode.Open, FileAccess.Read))
                    {
                        using (var reader = ExcelReaderFactory.CreateReader(stream))
                        {
                            var result = reader.AsDataSet(new ExcelDataSetConfiguration
                            {
                                ConfigureDataTable = _ => new ExcelDataTableConfiguration {UseHeaderRow = true}
                            });

                            _tableCollection = result.Tables;
                            cboSheet.Items.Clear();
                            foreach (DataTable item in _tableCollection) cboSheet.Items.Add(item.TableName);
                        }
                    }
                }
            }
        }

        private void cboSheet_SelectedIndexChanged(object sender, EventArgs e)
        {
            BindDataForDataGridView();
        }

        /// <summary>
        ///     給DataGridView綁定數據源
        /// </summary>
        private void BindDataForDataGridView()
        {
            var dt = _tableCollection[cboSheet.SelectedItem.ToString()];
            DataGridViewHelper.BindDataGridViewFillShow(dt, dataGridView1, Color.BlueViolet);
            dataGridView1.DataSource = dt;

            // DataGridView取消選中第一行第一列方法(綁定數據源后)
            dataGridView1.Rows[0].Cells[0].Selected = false;
            dataGridView1.Rows[0].Selected = false;
        }
    }
}
        /// <summary>
        ///     鋪滿顯示,綁定DataGridView數據源后
        ///     LDH @ 2021-7-28
        /// </summary>
        /// <param name="dt">DataTable</param>
        /// <param name="dgv">DataGridView</param>
        /// <param name="headerFontColor">表頭字體顏色設置</param>
        public static void BindDataGridViewFillShow(DataTable dt, DataGridView dgv, Color headerFontColor)
        {
            dgv.ClearSelection();
            dgv.AllowUserToAddRows = false;
            dgv.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill; // 平均分平鋪顯示
            dgv.SelectionMode = DataGridViewSelectionMode.FullRowSelect; // 設置為整行被選中

            // 給表頭內容換顏色
            dgv.EnableHeadersVisualStyles = false; // 這樣就可以使用當前的主題的樣式了,這句話十分關鍵!
            dgv.ColumnHeadersDefaultCellStyle.Font = new Font("微軟雅黑", 12, FontStyle.Bold);
            dgv.ColumnHeadersDefaultCellStyle.ForeColor = headerFontColor;

            dgv.DataSource = null;
            dgv.DataSource = dt;
        }

 


免責聲明!

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



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