文件读取草稿(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 ...
随机推荐
- java第十次面试题
一.给定一个字符串,把字符串内的字母转换成该字母的下一个字母,a换成b,z换成a,Z换成A,如aBf转换成bCg,字符串内的其他字符不改变,给定函数,编写函数. public static void ...
- 利用Web Services开发分布式应用
一.引言 在前面文章中分别介绍了MSMQ和.NET Remoting技术,今天继续分享.NET 平台下另一种分布式技术——Web Services 二.Web Services 详细介绍 2.1 We ...
- POJ3696 The Luckiest number
题意 Language:Default The Luckiest number Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 7 ...
- BUG的定位与分析思路
一般来说bug大多数存在于3个模块: 1.前台界面,包括界面的显示,兼容性,数据提交的判断,页面的跳转等等,这些bug基本都是一眼可见的,不太需要定位,当然也不排除一些特殊情况,本身数据传过来的时候就 ...
- Java多线程编程核心技术,第三章
1,notify的同步块完了,才会运行wait的同步块 2,interrupt()不是静态方法,用在wait的线程上会有InteruptException,锁也会被释放 3,notify()唤醒的线程 ...
- eclipse 的安装和汉化
第一步:直接百度搜索eclipse,第一个就是官方网站 第二步:点击DOWNLOAD 64BIT进入下载页面 第三步:点击DOWNLOAD进行下载 If the download doesn't st ...
- bzo j4825 [Hnoi2017]单旋
Description H 国是一个热爱写代码的国家,那里的人们很小去学校学习写各种各样的数据结构.伸展树(splay)是一种数据 结构,因为代码好写,功能多,效率高,掌握这种数据结构成为了 H 国的 ...
- MySQL 数据库查询练习
-- ---------------------------- -- mysql练习sql脚本 -- ---------------------------- create database db10 ...
- java io之管道流
一.java.io中存在一中流叫管道流,类似管道的功能.PipedOutputStream和PipedInputStream分别是管道输出流和管道输入流.这个两个流必须同时使用. 二.作用:进行两个线 ...
- html页面转换成pdf
一般页面都是.jsp页面,所以要把.jsp转换成html,在生成pdf,在网上找了好多方法,只有用一个插件,wkhtmltopdf-0.8.3.exe,生成的pdf会相对的好看. 先附上我做的.jsp ...