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)的更多相关文章

  1. cocos2d-x CSV文件读取 (Excel生成csv文件)

    实现类 CCSVParse.h #ifndef __C_CSV_PARSE__ #define __C_CSV_PARSE__ #include "cocos2d.h" #incl ...

  2. PHP 文件导出(Excel, CSV,txt)

    PHPExcel: 可以在我的文件中下载phpexcel放到项目中用!! 1,Excel 导出: /** * Excel导出例子 */ public function excel($res){ $ob ...

  3. Java学习-016-CSV 文件读取实例源代码

    上文(CSV文件写入)讲述了日常自动化测试过程中将测试数据写入 CSV 文件的源码,此文主要讲述如何从 CSV 文件获取测试过程中所需的参数化数据.敬请各位小主参阅,若有不足之处,敬请大神指正,不胜感 ...

  4. EpPlus读取生成Excel帮助类+读取csv帮助类+Aspose.Cells生成Excel帮助类

    大部分功能逻辑都在,少量自定义异常类和扩展方法 ,可用类似代码自己替换 //EpPlus读取生成Excel帮助类+读取csv帮助类,epplus只支持开放的Excel文件格式:xlsx,不支持 xls ...

  5. Python文件处理(txt、csv文件读取)

    打开文件 使用Python内置的方法 open()可以打开文件 file object = open(file_name [, access_mode][, buffering]) file_name ...

  6. C# .Net :Excel NPOI导入导出操作教程之将Excel文件读取并写到数据库表,示例分享

    using (FileStream fileReader = File.OpenRead(@"C:\Users\Administrator\Desktop\112.xls"))   ...

  7. 使用宏批量将多个csv文件转成excel文件

    在一个压缩文件中有100多个csv文件,要求要将此100多个csv文件转成excel文件,名字命名不变,有三种方式: 1. 傻不拉几的复制粘贴法 2. 一个一个打开csv文件,另存为xls文件,工作量 ...

  8. POI读取/写入Excel文件

    import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io ...

  9. 数据以Excel形式导出导服务器,再将文件读取到客户端另存 以HSSFWorkbook方式实现

    public void exportExcel(List<P2pInfo> repayXist,HttpServletRequest request,HttpServletResponse ...

随机推荐

  1. myeclipse越来越卡了怎么回事啊?

    去掉拼写检查:windows->preferences->General->Editors->Text Editors->Spelling 将“Enable spell ...

  2. Phonegap 开发环境搭建

    以Android为例介绍Phonegap开发环境搭建 一. 软件下载 1. JDK 8 下载 http://www.oracle.com/technetwork/java/javase/downloa ...

  3. 正则,以“this.Name”开头,以“;”结尾

    string regex="this\\.Name(.*?);"; string regex="this\\.Name(.*?);"; 以size开头,以数字结 ...

  4. 峰Spring4学习(8)spring对事务的支持

    一.事务简介: 二.编程式事务管理: 例子 1.需求:模拟转账,张三向李四转账50元: 数据库中存在t_count表: 代码实现: BankDao.java: package com.cy.dao; ...

  5. Monkey记录

    1.查找包名方法 方法一: sdk里面的appt 以ES文件浏览器为例,命令行中切换到aapt.exe目录执行:aapt dump badging E:\apk\es3.apk 方法二: 查看data ...

  6. Java 将字符串转换为字符数组 toCharArray()

    Java 手册 toCharArray public char[] toCharArray() 将此字符串转换为一个新的字符数组. 返回: 一个新分配的字符数组,它的长度是此字符串的长度,它的内容被初 ...

  7. 1027代码审计平台 1-sonar scanner

    1.代码审计 1.1综合性的代码分析平台 sonar支持自定义规则,较多的公司使用 360火线 1.2IDE辅助功能 Xcode.Android studio 阿里巴巴Java开发手机ide插件支持 ...

  8. Bootstrap的介绍和响应式媒体查询

    Bootstrap的介绍 凡是使用过Bootstrap的开发者,都不在乎做这么两件事情:复制and粘贴.哈哈~,是的使用Bootstrap非常简单,但是在复制粘贴之前,需要先对Bootstrap的用法 ...

  9. SpringBoot入门(2)

    一.上一篇 上一篇最后说到,可以把启动类放到非上级目录“@Componentscan这个注解后面指定扫描的包名(value=“com.zbb”)”,这里的value是一个数组,我们可以写多个目录,进行 ...

  10. CentOS7入门到精通实战课程课后习题

    Linux自动化运维系列①: CentOS7入门到精通实战--->传送门 http://edu.51cto.com/course/13055.html 01.系统入门课后习题 1.口述一个命令执 ...