EPPlus:网站

Supported Functions

Excel Merge Operate

    public class ExcelMergeOperate
{
private static Logger _logger = LogManager.GetCurrentClassLogger(); #region private method private static FileInfo CreateNewExcleFile(string excelPath)
{
FileInfo newFile = new FileInfo(excelPath);
if (newFile.Exists)
{
newFile.Delete(); // ensures we create a new workbook
newFile = new FileInfo(excelPath);
}
return newFile;
} private static void AddSheet(ExcelWorksheets fromSheets ,ExcelWorksheets toSheets,string defualtSheetName="")
{
foreach (var sheet in fromSheets)
{
//check name of worksheet, in case that worksheet with same name already exist exception will be thrown by EPPlus
string workSheetName = defualtSheetName != null?defualtSheetName:( sheet.Name!=null?sheet.Name : DateTime.Now.ToString("yyyyMMddhhssmmm"));
foreach (var masterSheet in toSheets)
{
if (sheet.Name == masterSheet.Name)
{
workSheetName = string.Format("{0}_{1}", workSheetName, DateTime.Now.ToString("yyyyMMddhhssmmm"));
}
}
sheet.ConditionalFormatting.RemoveAll();
//add new sheet
toSheets.Add(workSheetName, sheet);
}
} private static void MergeExcelsFromList<T>(List<T> date, string mergeExcelPath, string defualtSheetName = "date", bool create = false) where T : class
{ try
{
FileInfo newFile = create ? CreateNewExcleFile(mergeExcelPath) : new FileInfo(mergeExcelPath); ;
using (ExcelPackage masterPackage = new ExcelPackage(newFile))
{
//Create the Worksheet
var sheet = masterPackage.Workbook.Worksheets.Add(defualtSheetName);
//Create the format object to describe the text file
var format = new ExcelTextFormat();
format.TextQualifier = '"';
format.SkipLinesBeginning = ;
format.SkipLinesEnd = ;
//Now read the file into the sheet. Start from cell A1. Create a table with style 27. First row contains the header.
Console.WriteLine("Load the text file...");
//Load directories ordered by Name...
var range = sheet.Cells["A1"].LoadFromCollection(
from line in date
select line,
true, TableStyles.Medium9);
masterPackage.Save();
}
}
catch (Exception ex)
{
_logger.Error(ex.ToString());
}
} #endregion #region public method public static void MergeExcelsFromMutiExcelPath(List<string> excelPaths,string mergeExcelPath,bool create=false)
{
try
{
//excelPaths = new string[] { @"D:\Jimmy Team Project\Doc\2017-11-20日报表汇总\fang_Westwin Report _GlasessShop.xlsx", @"D:\Jimmy Team Project\Doc\2017-11-20日报表汇总\总结new2017-11-20.xlsx" };
//mergeExcelPath = @"D:\result.xlsx";
FileInfo newFile = create ? CreateNewExcleFile(mergeExcelPath): new FileInfo(mergeExcelPath);
using (ExcelPackage masterPackage = new ExcelPackage(newFile))
{
foreach (var file in excelPaths)
{ using (ExcelPackage pckg = new ExcelPackage(new FileInfo(file)))
{
AddSheet(pckg.Workbook.Worksheets, masterPackage.Workbook.Worksheets);
}
}
masterPackage.Save();
}
}
catch (Exception ex)
{
_logger.Error(ex.ToString());
}
} public static void MergeExcelsFromMutiExcelStream(List<Stream> streams, string mergeExcelPath, bool create = false)
{
try
{
FileInfo newFile = create ? CreateNewExcleFile(mergeExcelPath) : new FileInfo(mergeExcelPath);
using (ExcelPackage masterPackage = new ExcelPackage(newFile))
{
foreach (var stream in streams)
{
using (ExcelPackage pckg = new ExcelPackage(stream))
{
AddSheet(pckg.Workbook.Worksheets, masterPackage.Workbook.Worksheets);
}
}
masterPackage.Save();
}
}
catch (Exception ex)
{
_logger.Error(ex.ToString());
}
} public static void MergeExcelsFromCSVFile<T, M>(string csvPath, string mergeExcelPath, string defualtSheetName = "csv", bool create = false, string csvDelimiter = ",") where T : class where M : CsvClassMap<T>
{
using (FileStream fs = new FileStream(csvPath, FileMode.Open, FileAccess.Read))
{
List<T> date = CSVHelper<T>.GetEntityFromCSV<M>(fs, csvDelimiter);
MergeExcelsFromList(date, mergeExcelPath, defualtSheetName, create);
}
} public static void MergeExcelsFromCSVFile<T>(string csvPath, string mergeExcelPath, string defualtSheetName = "csv", bool create = false, string csvDelimiter = ",") where T : class
{
using (FileStream fs = new FileStream(csvPath, FileMode.Open, FileAccess.Read))
{
List<T> date = CSVHelper<T>.GetEntityFromCSV(fs, csvDelimiter);
MergeExcelsFromList(date, mergeExcelPath, defualtSheetName, create);
}
} #endregion }

general sheet from list

         public void GenalralSheetFromList<T>(List<T> list, ref ExcelWorksheet ws, string dateFormate= "yyyy-mm-dd HH:mm:ss") where T:class
{
if (list == null || list.Count == ) return;
var startIndex = ;
var row = ;
PropertyInfo[] props = list[].GetType().GetProperties();
foreach (PropertyInfo pi in props)
{
ws.Cells[row, startIndex].Value = pi.Name;
if (pi.PropertyType == typeof(DateTime)|| pi.PropertyType == typeof(DateTime?))
{
ws.Column(startIndex).Style.Numberformat.Format = dateFormate;
}
startIndex++;
}
foreach (T item in list)
{
startIndex = ;
row++;
foreach (PropertyInfo pi in props)
{
ws.Cells[row, startIndex++].Value = item.GetType()
.GetProperty(pi.Name)
.GetValue(item, null); }
}
return;
}

Nuget EPPlus的使用的更多相关文章

  1. 利用 NUget包 EPPlus 实现数据导出到Excel(适用于MVC)

    aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAvoAAABpCAIAAADEEBBGAAAJdElEQVR4nO3cy2ob5wLA8TxKnqTrrr

  2. 离线安装nuget包EPPlus

    1先去https://www.nuget.org/packages/EPPlus/4.1.0下载,epplus.4.1.0.nupkg 2找到本地文件位置:H:\DOWNLOAD\ 3在vs的程序包管 ...

  3. 利用 NUget包 EPPlus 实现数据导出到Excel(适用于DTcms)

    首先安装EPPlus 包

  4. C# NPOI导出Excel和EPPlus导出Excel比较

    系统中经常会使用导出Excel的功能. 之前使用的是NPOI,但是导出数据行数多就报内存溢出. 最近看到EPPlus可以用来导出Excel,就自己测了下两者导出上的差异. NPIO官网地址:http: ...

  5. [转]比NPOI更討喜的Excel元件-EPPlus

    本文转自:http://blog.darkthread.net/post-2012-05-12-epplus.aspx 前陣子發表 [潛盾機]將檔案結構匯成Excel文件,從網友佑翔的留言(特此感謝) ...

  6. 【netcore基础】.NET Core使用EPPlus实现MVC API里的Excel导出功能 配置中文表头

    EPPlus 用来操作excel非常方便,不用依赖微软的office包,所以推荐使用. 下面是具体步骤和代码 首先用nuget安装 EPPlus.Core 我装的版本是 1.5.4 然后就可以用 Ex ...

  7. EPPlus实战篇——Excel写入

    .net core 项目 可以向excel写入任何类型(T)的数据,只要T中的field的[Display(Name = "1233", Description = "# ...

  8. EPPlus实战篇——Excel读取

    .net core 项目 可以从excel读取任何类型(T)的数据,只要T中的field的[Display(Name = "1233")]中的name==excel column ...

  9. C# NPOI导出Excel和EPPlus导出Excel

    转自:http://www.cnblogs.com/tanpeng/p/6155749.html 系统中经常会使用导出Excel的功能.之前使用的是NPOI,但是导出数据行数多就报内存溢出. 最近看到 ...

随机推荐

  1. 集合List

    //数组 存值长度固定,类型固定 //集合 长度不固定,类型也可以不固定 List<int> list = new List<int>(); //list.Add(78); ; ...

  2. Python学习记录之-----类

    面向过程 VS 面向对象 编程范式 编程是 程序 员 用特定的语法+数据结构+算法组成的代码来告诉计算机如何执行任务的过程 , 一个程序是程序员为了得到一个任务结果而编写的一组指令的集合,正所谓条条大 ...

  3. Python大神成长之路: 第三次学习记录 集合 函数 装饰 re

    学习记录day03   字符串可以直接切片,But字符串不可修改 字符串修改:生成了一个新的字符串 LIst修改,在原基础上修改(原内存上)     集合是一个无序的,不重复的数据组合,它的主要作用如 ...

  4. C#基础知识整理

    年时,北风吹雁雪纷纷,一条秋裤冻上头.冷的连手都懒得动,就随便翻翻书,也没有更新博客,如今年已过,开始投入到正常的工作状态中,趁现在需求还没有来,把C#基础知识梳理一下,其实一直以来就想这样做的,对于 ...

  5. C++笔试题2(基础题)

    温馨提醒:此文续<C++笔试题(基础题)> (112)请写出下列程序的输出内容 代码如下: #include <iostream> using namespace std; c ...

  6. 设计模式之Builder(建造者)(转)

    Builder模式定义: 将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示. Builder模式是一步一步创建一个复杂的对象,它允许用户可以只通过指定复杂对象的类型和内容就可以 ...

  7. Bodymovin:Bodymovin和Lottie:把AE动画转换成HTML5/Android/iOS原生动画

    转自:https://www.cnblogs.com/zamhown/p/6688369.html 大杀器Bodymovin和Lottie:把AE动画转换成HTML5/Android/iOS原生动画 ...

  8. 只打开一次浏览器,生成html测试报告<小紧张中......>

    from selenium import webdriverimport unittestimport time class Blog(unittest.TestCase): "" ...

  9. 怎样从外网访问内网RESTful API?

    本地部署了RESTful API,只能在局域网内访问,怎样从外网也能访问到本地的RESTful API呢?本文将介绍具体的实现步骤. 准备工作 部署并启动RESTful API服务端 默认部署的RES ...

  10. TF-IDF基本原理

    1.TF-IDF介绍 TF/IDF(term frequency–inverse document frequency)用以评估字词 对于一个文件集其中一份文件的重要程度.字词的重要性随着它在文件中出 ...