文件读取草稿(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 = ;
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 - )
{
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[].Contains(endWith))
{
break;
}
var row = table.NewRow();
for (var k = ; k < list.Length; k++)
{ row[k] = list[k];
}
table.Rows.Add(row); }
else
{
var row = table.NewRow();
for (var k = ; 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 > )
{
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 = ; i < sheetCount; i++)
{
var sheet = workbook.GetSheetAt(i);
retSet.Tables.Add(ReadTable(sheet, , ));
}
}
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 < -)
{
throw new Exception("无效的表头索引值!最小值为-1!");
}
IRow headerRow = null;
var hasHead = true;
//无表头,纯数据
if (titleIndex == -)
{
headerRow = sheet.GetRow();//仅用于取列数用
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 + - ); 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)的更多相关文章
- cocos2d-x CSV文件读取 (Excel生成csv文件)
实现类 CCSVParse.h #ifndef __C_CSV_PARSE__ #define __C_CSV_PARSE__ #include "cocos2d.h" #incl ...
- PHP 文件导出(Excel, CSV,txt)
PHPExcel: 可以在我的文件中下载phpexcel放到项目中用!! 1,Excel 导出: /** * Excel导出例子 */ public function excel($res){ $ob ...
- Java学习-016-CSV 文件读取实例源代码
上文(CSV文件写入)讲述了日常自动化测试过程中将测试数据写入 CSV 文件的源码,此文主要讲述如何从 CSV 文件获取测试过程中所需的参数化数据.敬请各位小主参阅,若有不足之处,敬请大神指正,不胜感 ...
- EpPlus读取生成Excel帮助类+读取csv帮助类+Aspose.Cells生成Excel帮助类
大部分功能逻辑都在,少量自定义异常类和扩展方法 ,可用类似代码自己替换 //EpPlus读取生成Excel帮助类+读取csv帮助类,epplus只支持开放的Excel文件格式:xlsx,不支持 xls ...
- Python文件处理(txt、csv文件读取)
打开文件 使用Python内置的方法 open()可以打开文件 file object = open(file_name [, access_mode][, buffering]) file_name ...
- C# .Net :Excel NPOI导入导出操作教程之将Excel文件读取并写到数据库表,示例分享
using (FileStream fileReader = File.OpenRead(@"C:\Users\Administrator\Desktop\112.xls")) ...
- 使用宏批量将多个csv文件转成excel文件
在一个压缩文件中有100多个csv文件,要求要将此100多个csv文件转成excel文件,名字命名不变,有三种方式: 1. 傻不拉几的复制粘贴法 2. 一个一个打开csv文件,另存为xls文件,工作量 ...
- POI读取/写入Excel文件
import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io ...
- 数据以Excel形式导出导服务器,再将文件读取到客户端另存 以HSSFWorkbook方式实现
public void exportExcel(List<P2pInfo> repayXist,HttpServletRequest request,HttpServletResponse ...
随机推荐
- 高性能优化规范建议Mysql
Mysql高性能优化规范建议 https://www.cnblogs.com/huchong/p/10219318.html 数据库命令规范 所有数据库对象名称必须使用小写字母并用下划线分割 所有数据 ...
- python3.5 安装 numpy1.14.4
AMD64 import pip._internal print(pip._internal.pep425tags.get_supported()) WIN32 import pip print(pi ...
- 显示等待WebDriverWait
显示等待:WebDriverWait 等待页面加载完成,找到某个条件发生后再继续执行后续代码,如果超过设置时间检测不到则抛出异常 WebDriverWait(driver, timeout, poll ...
- 异步编程 In .NET(转载)
概述 在之前写的一篇关于async和await的前世今生的文章之后,大家似乎在async和await提高网站处理能力方面还有一些疑问,博客园本身也做了不少的尝试.今天我们再来回答一下这个问题,同时我们 ...
- 如何查看oracle表空间是否自动扩展
select file_name,autoextensible,increment_by from dba_data_files
- eclipse 和 Myeclipse中Maven Web项目出现小红叉的 详细解决方法
在我们创建maven项目是常会出现小红叉,如图: 解决办法: 1.可以 点击鼠标右键 maven--->update project.一般可以解决. 2.查看 window---->sh ...
- NOIP2013 Day2
1.积木大赛 https://www.luogu.org/problemnew/show/1969 这道题在考试时暴力得比较麻烦,导致只得了80分,t了两个点. 思路为寻找一个区间内高度大于0的最低点 ...
- mac电脑安装selenium 记录
1.使用终端去命令安装 sudo easy_install selenium 参考:https://www.cnblogs.com/nichoc/p/5543654.html 2.听说驱动放在 /us ...
- [Spring] Resource 资源
import ch.qos.logback.core.net.SyslogOutputStream; import org.springframework.core.io.ClassPathResou ...
- lamp。查看版本
[root@localhost ~]# php -vPHP 5.2.16 (cli) (built: Dec 17 2010 14:09:03) Copyright (c) 1997-2010 The ...