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
    
        }
    }
  • 相关阅读:
    7.21 高博教育 数组 内存
    【基础扎实】Python操作Excel三模块
    PAT 甲级 1012 The Best Rank
    PAT 甲级 1011  World Cup Betting
    PAT 甲级 1010 Radix
    链式线性表——实验及提升训练
    循环程序设计能力自测
    链表应用能力自测
    PAT 甲级 1009 Product of Polynomials
    1008 Elevator (20分)
  • 原文地址:https://www.cnblogs.com/owensky/p/xlmeng.html
Copyright © 2011-2022 走看看