首页 > 代码库 > 文件读取草稿(excel,csv)
文件读取草稿(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; } } }
文件读取草稿(excel,csv)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。