zoukankan      html  css  js  c++  java
  • 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
    
        }
    }
  • 相关阅读:
    【ASP.NET Web API教程】5.5 ASP.NET Web API中的HTTP Cookie
    【ASP.NET Web API教程】3.3 通过WPF应用程序调用Web API(C#)
    【ASP.NET Web API教程】5.4 ASP.NET Web API批处理器
    【翻译】ASP.NET Web API是什么?
    【ASP.NET Web API教程】2.3.6 创建产品和订单控制器
    《精通ASP.NET MVC 3框架》译者序
    【ASP.NET Web API教程】3 Web API客户端
    委托、事件与匿名方法 — 学习委托最好的资料
    【ASP.NET Web API教程】2.3.3 创建Admin控制器
    【ASP.NET Web API教程】2.3.5 用Knockout.js创建动态UI
  • 原文地址:https://www.cnblogs.com/owensky/p/xlmeng.html
Copyright © 2011-2022 走看看