zoukankan      html  css  js  c++  java
  • 文件读取草稿(excel,csv)

    using NPOI.XSSF.UserModel;
    using System;
    using System.Collections.Generic;
    using System.Data;
    using System.IO;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace ConsoleApplication3
    {
        public class ExcelHelper
        {
    
            public static System.Data.DataSet GetTablesFromTxt(string path, string splitChar, int startLine, string endWith)
            {
                int i = 0;
                System.Collections.ArrayList tablelist = new System.Collections.ArrayList();
                System.Data.DataTable table = null;
                string s = "";
                System.Data.DataSet ds = new System.Data.DataSet();
                //using (FileStream fs = new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
                //{
    
                System.Data.DataTable tmp = null;
                using (StreamReader sr = new StreamReader(path, System.Text.Encoding.Default))
                {
                    while (!string.IsNullOrEmpty(s = sr.ReadLine()))
                    {
    
                        if (i >= startLine - 1)
                        {
                            string[] list = s.Split(new string[] { splitChar }, StringSplitOptions.None);
                            if (tmp == null)
                            {
                                tmp = new System.Data.DataTable();
                                //table = new System.Data.DataTable();
                                foreach (string t in list)
                                {
                                    tmp.Columns.Add(new System.Data.DataColumn());
                                }
                                table = tmp.Clone();
                                if (!string.IsNullOrEmpty(endWith) && list[0].Contains(endWith))
                                {
                                    break;
                                }
                                var row = table.NewRow();
                                for (var k = 0; k < list.Length; k++)
                                {
    
                                    row[k] = list[k];
                                }
                                table.Rows.Add(row);
    
                            }
                            else
                            {
                                var row = table.NewRow();
                                for (var k = 0; k < list.Length; k++)
                                {
                                    row[k] = list[k];
                                }
                                table.Rows.Add(row);
                                /*
                                if ((i + 1) % 200000 == 0)
                                {
                                    ds.Tables.Add(table);
                                    table = new System.Data.DataTable();
                                    table = tmp.Clone();
    
                                }*/
                            }
                        }
                        i++;
                    }
                    if (table.Rows.Count > 0)
                    {
                        ds.Tables.Add(table);
                    }
                }
    
                //}
                return ds;
            }
            /// <summary>
            /// 读取指定Excel所有Sheet
            /// </summary>
            /// <param name="path">文件路径</param>
            /// <returns></returns>
            public static DataSet ReadDataSet(string path)
            {
                DataSet retSet = new DataSet();
                using (FileStream stream = new FileStream(path, FileMode.Open, FileAccess.Read))
                {
                    IWorkbook workbook = WorkbookFactory.Create(stream);
                    var sheetCount = workbook.NumberOfSheets;
                    for (int i = 0; i < sheetCount; i++)
                    {
                        var sheet = workbook.GetSheetAt(i);
                        retSet.Tables.Add(ReadTable(sheet, 0, 0));
                    }
                }
                return retSet;
            }
            /// <summary>
            /// 读取指定索引Sheet的Excel文件内容,返回DataTable
            /// </summary>
            /// <param name="path">excel文件物理路径</param>
            /// <param name="sheetIndex">页签索引,从0开始</param>
            /// <param name="titleIndex">表头索引,从0开始,如果没有表头,请填-1,如果表头在第二行,请填1</param>
            /// <param name="lastRowDeduction">数据最后一行索引,如果后三行是统计之类的,请填-3</param>
            /// <returns>返回DataTable,TableName为对应SheetName</returns>
            public static DataTable ReadTable(string path, int sheetIndex, int titleIndex, int lastRowDeduction)
            {
                using (FileStream stream = new FileStream(path, FileMode.Open, FileAccess.Read))
                {
                    IWorkbook workbook = WorkbookFactory.Create(stream);
                    ISheet sheet = workbook.GetSheetAt(sheetIndex);
                    return ReadTable(sheet, titleIndex, lastRowDeduction);
                }
            }
    
    
    
    
            private static DataTable ReadTable(ISheet sheet, int titleIndex, int lastRowDeduction)
            {
                var retDatTable = new DataTable();
                retDatTable.TableName = sheet.SheetName;
                if (titleIndex < -2)
                {
                    throw new Exception("无效的表头索引值!最小值为-1!");
                }
                IRow headerRow = null;
                var hasHead = true;
                //无表头,纯数据
                if (titleIndex == -1)
                {
                    headerRow = sheet.GetRow(0);//仅用于取列数用
                    hasHead = false;
                }
                else
                {
                    headerRow = sheet.GetRow(titleIndex);
                }
                if (headerRow == null)
                {
                    return retDatTable;
                }
                int cellCount = headerRow.LastCellNum;
    
                for (int i = headerRow.FirstCellNum; i < cellCount; i++)
                {
                    //无表头
                    if (!hasHead)
                    {
                        retDatTable.Columns.Add("Column" + i);
                        continue;
                    }
                    //处理有表头的
                    var cell = headerRow.GetCell(i);
                    var title = string.Empty;
                    if (cell != null)
                    {
                        headerRow.GetCell(i).SetCellType(CellType.String);
                        title = cell.StringCellValue;
                    }
                    else
                    {
                        title = Guid.NewGuid().ToString();
                    }
                    retDatTable.Columns.Add(title);
                }
    
    
                //最后一行的标号  即总的行数
                int rowCount = sheet.LastRowNum;
                rowCount += lastRowDeduction;
    
                for (int i = (titleIndex + 1 - 1); i <= rowCount; i++)
                {
                    var row = sheet.GetRow(i);
                    DataRow dataRow = retDatTable.NewRow();
    
                    for (int j = row.FirstCellNum; j < cellCount; j++)
                    {
                        var cell = row.GetCell(j);
                        if (cell != null)
                            try
                            {
                                switch (cell.CellType)
                                {
                                    case CellType.Numeric:
                                        //NPOI中数字和日期都是NUMERIC类型的,这里对其进行判断是否是日期类型
                                        if (HSSFDateUtil.IsCellDateFormatted(cell))//日期类型
                                        {
                                            dataRow[j] = cell.DateCellValue;
                                        }
                                        else//其他数字类型
                                        {
                                            dataRow[j] = cell.NumericCellValue;
                                        }
                                        break;
                                    case CellType.Formula:
                                        IFormulaEvaluator eva = null;
                                        var workType = sheet.Workbook.GetType();
                                        if (workType.Name == "XSSFWorkbook")
                                        {
                                            eva = new XSSFFormulaEvaluator(sheet.Workbook);
                                        }
                                        else
                                        {
                                            eva = new HSSFFormulaEvaluator(sheet.Workbook);
                                        }
                                        dataRow[j] = eva.Evaluate(cell).FormatAsString();
                                        break;
                                    case CellType.Blank:
                                        dataRow[j] = "";
                                        break;
                                    case CellType.Unknown:
                                    case CellType.Boolean:
                                    case CellType.Error:
                                    case CellType.String:
                                        dataRow[j] = cell.StringCellValue; ;
                                        break;
                                    default:
                                        break;
                                }
                            }
                            catch { }
                    }
                    retDatTable.Rows.Add(dataRow);
                }
                return retDatTable;
            }
    
    
    
    
        }
    }
  • 相关阅读:
    vs2017 vs2019 打开cs文件提示无法识别的GUID格式
    A股和B股票的区别?
    选股:“均线是水,K线是舟,量是马达!”的选美理念!
    什么是K线?K线的详解!
    5日均线MACD
    炒股的常见技术指标
    选股票几大原则:趋势原则,强势原则,分批原则
    金融蝴蝶效应
    股市里的大户和散户
    期货平仓/强制平仓/爆仓-股市平仓建仓
  • 原文地址:https://www.cnblogs.com/kexb/p/6814967.html
Copyright © 2011-2022 走看看