• c#操作Excel整理总结


    大家好,这是我在工作中总结的关于C#操作Excel的帮助类,欢迎大家批评指正!

    using System;
    using System.Collections.Generic;
    using System.Data;
    using System.Data.OleDb;
    using System.IO;
    using Aspose.Cells;
    
    namespace MusicgrabTool
    {
        public class FileExport
        {
            #region 公共参数
    
            /// <summary>
            /// 文件名
            /// </summary>
            public string ExportFilePath { get; set; }
    
            /// <summary>
            /// 标签名
            /// </summary>
            public string FileName { get; set; }
    
            #endregion
    
            #region 写入Excel数据
    
            /// <summary>
            /// 写入数据到Excel中
            /// </summary>
            /// <param name="dataSource">数据源</param>
            /// <param name="sheetName">标签名</param>
            /// <param name="headNames">列名</param>
            /// <returns></returns>
            public bool ExportExcel(List<string[]> dataSource, string sheetName, string[] headNames)
            {
                //转DataTable
                try
                {
                    if (!Directory.Exists(ExportFilePath))
                    {
                        Directory.CreateDirectory(ExportFilePath);
                    }
    
                    if (dataSource.Count == 0)
                    {
                        return true;
                    }
                    DataTable dt = new DataTable();
                    foreach (string headName in headNames)
                    {
                        dt.Columns.Add(headName);
                    }
    
                    //如果大于100W
                    if (dataSource.Count > 1000000)
                    {
                        for (int i = 0; i < 1000000; i++)
                        {
                            DataRow row = dt.NewRow();
                            for (int k = 0; k < dataSource[i].Length; k++)
                            {
                                row[k] = dataSource[i][k];
                            }
                            dt.Rows.Add(row);
                        }
                        WriteToExcel(dt, sheetName + "01", headNames);
    
                        //100W 写入完成
                        dt.Rows.Clear();
                        for (int i = 1000000; i < dataSource.Count; i++)
                        {
                            DataRow row = dt.NewRow();
                            for (int k = 0; k < dataSource[i].Length; k++)
                            {
                                row[k] = dataSource[i][k];
                            }
                            dt.Rows.Add(row);
                        }
                        WriteToExcel(dt, sheetName + "02", headNames);
                    }
                    else
                    {
                        foreach (string[] strings in dataSource)
                        {
                            DataRow row = dt.NewRow();
                            for (int i = 0; i < strings.Length; i++)
                            {
                                row[i] = strings[i];
                            }
                            dt.Rows.Add(row);
                        }
                        WriteToExcel(dt, sheetName, headNames);
                    }
                    return true;
                }
                catch
                {
                    return false;
                }
            }
    
            /// <summary>
            /// 将数据导出到Excel文件
            /// </summary>
            /// <returns></returns>
            private void WriteToExcel(DataTable source, string sheetName, string[] headNames)
            {
                Workbook workBook = new Workbook();
                Worksheet workSheet = null;
                string str = string.Format("{0}\{1}", ExportFilePath.Trim('/').Trim('\'), this.FileName);
                if (!File.Exists(str))
                {
                    workBook.Save(str);
                }
    
                if (File.Exists(str))
                {
                    FileStream fs = new FileStream(str, FileMode.Open);
                    workBook.Open(fs);
                    workSheet = workBook.Worksheets.Add(sheetName);
                    fs.Close();
                    //添加列头
                    workSheet.Cells.ImportArray(headNames, 0, 0, false);
                    workSheet.Cells.ImportDataTable(source, false, 1, 0, true);
                    //ImportArrayList(source, 1, 0, true);
                    workSheet.AutoFitColumns();
                    workBook.Save(str);
                }
            }
    
            #endregion
    
            #region 读取Excel中数据
    
            /// <summary>
            /// 从excel中读取数据至DataTable
            /// </summary>
            /// <param name="filePath">excel全路径</param>
            /// <returns></returns>
            public DataTable ReadExcel2DataTable(string filePath)
            {
                if (!File.Exists(filePath))
                {
                    return null;
                }
    
                Workbook workbook = new Workbook();
                FileStream fs = new FileStream(filePath, FileMode.Open);
                workbook.Open(fs);
    
                // 获取该excel文件的第一个sheet
                Worksheet worksheet = workbook.Worksheets[0];
                // 读取出所有的数据
                // 第一个参数是:从该excel的哪一行开始读(计数从0开始)
                // 第二个参数是:从该excel的哪一列开始读(计数从0开始)
                // 第三个参数是:行数
                // 第四个参数是:列数
    
                int i = worksheet.Cells.MaxDataColumn;
                int j = worksheet.Cells.MaxDataRow;
    
                DataTable dataTableFromExcel = worksheet.Cells.ExportDataTable(0, 0, worksheet.Cells.MaxDataRow + 1,
                                                                               worksheet.Cells.MaxDataColumn + 1, false);
                fs.Close();
                return dataTableFromExcel;
            }
    
            #endregion
    
        }
    }
  • 相关阅读:
    浅拷贝和深拷贝
    强大的VS插件CodeRush发布v19.1.4|支持Visual Studio 2019
    DevExpress v19.1新版亮点——WinForms篇(三)
    MyEclipse使用教程:使用Workbench和Perspectives
    「版本升级」界面控件Kendo UI正式发布R2 2019|附下载
    DevExpress v19.1新版亮点——WinForms篇(二)
    CodeMix使用教程:构建自定义DevStyle主题
    DevExpress v19.1新版亮点——WinForms篇(一)
    MyEclipse XML & XML架构教程:XML Schema (XSD)编辑器
    VCL界面控件DevExpress VCL Controls发布v18.2.7|附下载
  • 原文地址:https://www.cnblogs.com/owensky/p/xlmeng.html
Copyright © 2020-2023  润新知