文件读取草稿(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 ...
随机推荐
- Session History 属性和方法
History 接口允许操作浏览器的曾经在标签页或者框架里访问的会话历史记录. js通过window.history来访问和操作的,操作的范围是某个tab的会话历史记录. 这个tab打开后,tab内的 ...
- centOS上安装MySQL5.7
在centos上安装mysql,前提得有sudo的权限.没有的话先去跟管理员申请一个. STEP 1 - 安装MySQL 首先打开浏览器访问下 https://dev.mysql.com/downlo ...
- 老爷机iphone4s 9.2.1降级6.1.3
原帖见威锋网 sunnyskyline 2017年1月10日发的贴. 本文中加了一些我自己的情况,也是一知半解,抛砖引玉吧. 首先进行备份.进行备份.进行备份. 感谢大神@极端阴险 感谢@shuaig ...
- Html页面Dom对象之Event
HTML DOM Event 对象 实例 哪个鼠标按钮被点击? 光标的坐标是? 被按的按键的 unicode 是? 相对于屏幕,光标的坐标是? shift 键被按了吗? 哪个元素被点击了? 哪个事件类 ...
- CH1806 Matrix
题意 描述 给定一个M行N列的01矩阵(只包含数字0或1的矩阵),再执行Q次询问,每次询问给出一个A行B列的01矩阵,求该矩阵是否在原矩阵中出现过. 输入格式 第一行四个整数M,N,A,B. 接下来一 ...
- nyoj A+B Problem IV
A+B Problem IV 时间限制:1000 ms | 内存限制:65535 KB 难度:3 描述 acmj最近发现在使用计算器计算高精度的大数加法时很不方便,于是他想着能不能写个程序把这 ...
- 自定义linux命令
方法一.修改/etc/bashrc文件 在文件底部加入 alias zone="cd /usr/local/webserver" 在命令行输入zone,则会直接进入到制定目录 ...
- Guid.NewGuid().ToString()生成唯一码js
Guid.NewGuid().ToString() 生成唯一码,用户生成随机id 生成唯一编码,版本控制对比等. //表示全局唯一标识符 (GUID). function Guid(g) { var ...
- Tomcat服务器端口的配置
一.Tomcat服务器端口的配置 Tomcat的所有配置都放在conf文件夹之中,里面的server.xml文件是配置的核心文件. 如果想修改Tomcat服务器的启动端口,则可以在server.xml ...
- TS/ES/PS
数字信号实际传送的是数据流,一般数据流包括以下三种: ES流(Elementary Stream): 也叫基本码流,包含视频.音频或数据的连续码流. PES流(Packet Elementary St ...