常用类-Excel-使用Aspose.Cells插件
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Xml;
using System.Data;
using System.IO;
using System.Data.OleDb;
using Aspose.Cells;
using System.Reflection; namespace Utils
{
/// <summary>
/// 解析Excel文件
/// </summary>
public class ExcelUitl
{
public static DataSet ExcelToDS(string Path)
{
DataSet ds = new DataSet(); Workbook workbook = new Workbook();
workbook.Open(Path);
Cells cells = workbook.Worksheets[0].Cells;
DataTable dt = cells.ExportDataTableAsString(0, 0, cells.MaxDataRow + 1, cells.MaxDataColumn + 1, true);
ds.Tables.Add(dt);
return ds;
}
public static DataSet ExcelToDS(string Path, string sheetName)
{
DataSet ds = new DataSet(); Workbook workbook = new Workbook();
workbook.Open(Path); Worksheet sheet = workbook.Worksheets[sheetName];
if (sheet == null)
{
return null;
}
Cells cells = sheet.Cells;
DataTable dt = cells.ExportDataTableAsString(0, 0, cells.MaxDataRow + 1, cells.MaxDataColumn + 1, true);
ds.Tables.Add(dt);
return ds;
}
public static DataSet GetTableList(string Path)
{
DataSet ds = new DataSet(); Workbook workbook = new Workbook();
workbook.Open(Path);
if (workbook.Worksheets != null)
{
foreach (Worksheet sheet in workbook.Worksheets)
{
Cells cells = sheet.Cells; DataTable dt = cells.ExportDataTableAsString(0, 0, cells.MaxDataRow + 1, cells.MaxDataColumn + 1, true);
dt.TableName = sheet.Name;
ds.Tables.Add(dt);
}
}
return ds;
} /// <summary>
/// </summary>
/// <param name="tablelist"></param>
/// <param name="path"></param>
/// <param name="error"></param>
public static void ImportAndZip(List<DataTable> tablelist, string excelFilePath)
{
Workbook workbook = new Workbook();
int sheetIndex = 0; string dir = excelFilePath.Replace(Path.GetFileName(excelFilePath), "");
string txtdir = Path.Combine(dir, "sco");
if (!Directory.Exists(txtdir))
{
Directory.CreateDirectory(txtdir);
} DataTable error = new DataTable();
error.TableName = "导出情况表";
error.Columns.Add(new DataColumn()
{
ColumnName = "错误工作簿名称",
});
error.Columns.Add(new DataColumn()
{
ColumnName = "错误工作簿行",
});
error.Columns.Add(new DataColumn()
{
ColumnName = "错误工作簿列名",
});
error.Columns.Add(new DataColumn()
{
ColumnName = "错误原因",
});
error.Columns.Add(new DataColumn()
{
ColumnName = "导入路径",
}); foreach (DataTable table in tablelist)
{
Worksheet sheet = null;
if (sheetIndex == 0)
{
sheet = workbook.Worksheets[sheetIndex];
sheet.Name = table.TableName;
}
else
{
sheet = workbook.Worksheets.Add(table.TableName);
} //标题
int indexX = 0, indexY = 0;
foreach (DataColumn column in table.Columns)
{
sheet.Cells[indexX, indexY].PutValue(column.ColumnName);
indexY++;
} int Colnum = table.Columns.Count;//表格列数
int Rownum = table.Rows.Count;//表格行数 //生成数据行
for (int i = 0; i < Rownum; i++)
{
for (int k = 0; k < Colnum; k++)
{
try
{
//单元格最大存 32k内容
sheet.Cells[1 + i, k].PutValue(table.Rows[i][k].ToString()); //添加数据
}
catch (Exception ex)
{
string message = "";
string txtName = table.TableName + "_" + i + ".txt";
string txtPath = "";
if (ex.Message.ToString().Contains("MS Excel only allows to put a string shorter than 32K to a Cell"))
{
message = "单元格数据大于32K不能写入excel";
//将内容写入txt
File.WriteAllText(Path.Combine(txtdir, txtName), table.Rows[i][k].ToString());
txtPath = "sco/" + txtName;
}
else
{
message = ex.Message.ToString();
} //sun: 当数据太大。我们不导入excel,将文本导入txt,路径路径
error.Rows.Add(new object[] { sheet.Name, i, table.Columns[k].ColumnName, message, txtPath });
}
}
}
SetHeaderStyle(sheet); //sheet个数
sheetIndex++;
} //将错误信息表也写入excel
Worksheet errrsheet = workbook.Worksheets.Add(error.TableName);
for (int i = 0; i < error.Columns.Count; i++)
{
errrsheet.Cells[0, i].PutValue(error.Columns[i].ColumnName);
}
//foreach (DataColumn column in error.Columns)
//{
// errrsheet.Cells[0, 0].PutValue(column.ColumnName);
//}
int eColnum = error.Columns.Count;//表格列数
int eRownum = error.Rows.Count;//表格行数
for (int i = 0; i < eRownum; i++)
{
for (int k = 0; k < eColnum; k++)
{
errrsheet.Cells[1 + i, k].PutValue(error.Rows[i][k].ToString()); //添加数据
}
}
SetHeaderStyle(errrsheet); workbook.Save(excelFilePath);
} /// <summary>
/// 创建excel
/// </summary>
/// <param name="tablelist"></param>
/// <param name="path"></param>
public static void CreateExcel(List<DataTable> tablelist, string path)
{
Workbook workbook = new Workbook();
int sheetIndex = 0;
foreach (DataTable table in tablelist)
{
Worksheet sheet = null;
if (sheetIndex == 0)
{
sheet = workbook.Worksheets[sheetIndex];
sheet.Name = table.TableName;
}
else
{
sheet = workbook.Worksheets.Add(table.TableName);
} //标题
int indexX = 0, indexY = 0;
foreach (DataColumn column in table.Columns)
{
sheet.Cells[indexX, indexY].PutValue(column.ColumnName);
indexY++;
} int Colnum = table.Columns.Count;//表格列数
int Rownum = table.Rows.Count;//表格行数 //生成数据行
for (int i = 0; i < Rownum; i++)
{
for (int k = 0; k < Colnum; k++)
{
try
{
//单元格最大存 32k内容
sheet.Cells[1 + i, k].PutValue(table.Rows[i][k].ToString()); //添加数据 }
catch (Exception ex)
{
//sun: 当数据太大。我们不导入 }
}
}
SetHeaderStyle(sheet); //sheet个数
sheetIndex++;
} workbook.Save(path);
}
public static void SetHeaderStyle(Worksheet sheet)
{
#region header style
Style style = new Style();
style.Font.IsBold = true;
style.Font.Size = 12;
StyleFlag styleFlag = new StyleFlag
{
FontBold = true,
FontSize = true,
};
sheet.Cells.ApplyRowStyle(0, style, styleFlag);
sheet.AutoFitColumns(); #endregion
} public static void SetBodyStyle(Worksheet sheet, int column)
{
#region header style
Style style = new Style();
style.Font.IsBold = false;
style.Font.Size = 11;
StyleFlag styleFlag = new StyleFlag
{
FontBold = true,
FontSize = true
};
sheet.Cells.ApplyColumnStyle(column, style, styleFlag);
sheet.AutoFitColumns(); #endregion
}
} }
常用类-Excel-使用Aspose.Cells插件的更多相关文章
- csharp: read excel using Aspose.Cells
/// <summary> /// /// </summary> /// <param name="strFileName"></para ...
- 常用类-excel转csv
public class ExcelFileHelper { public static bool SaveAsCsv(string excelFilePath, string destination ...
- 使用Aspose.Cells读取Excel
最新更新请访问: http://denghejun.github.io Aspose.Cells读取Excel非常方便,以下是一个简单的实现读取和导出Excel的操作类: 以下是Aspose.Ce ...
- ASPOSE.Cells & ASPOSE.Words 操纵Excel和Word文档的 .NET Core 实例
Aspose.Total是Aspose公司旗下的最全的一套office文档管理方案,它提供的原生API可以对Word.Excel.PDF.Powerpoint.Outlook.CAD.图片.3D.ZI ...
- Aspose.Cells基础使用方法整理
Aspose.Cells 插件,将web端数据以excel形式导出到客户端. 相关文档: https://blog.csdn.net/djk8888/article/details/53065416 ...
- 基于 Aspose.Cells与XML导入excel 数据----操作类封装
前言 导入excel数据, 在每个项目中基本上都会遇到,第三方插件或者基于微软office,用的最多的就是npoi,aspose.cells和c#基于office这三种方式,其中各有各的优缺点,在这也 ...
- EpPlus读取生成Excel帮助类+读取csv帮助类+Aspose.Cells生成Excel帮助类
大部分功能逻辑都在,少量自定义异常类和扩展方法 ,可用类似代码自己替换 //EpPlus读取生成Excel帮助类+读取csv帮助类,epplus只支持开放的Excel文件格式:xlsx,不支持 xls ...
- NPOI、MyXls、Aspose.Cells 导入导出Excel(转)
Excel导入及导出问题产生: 从接触.net到现在一直在维护一个DataTable导s出到Excel的类,时不时还会维护一个导入类.以下是时不时就会出现的问题: 导出问题: 如果是asp.net,你 ...
- C# WinForm 导出导入Excel/Doc 完整实例教程[使用Aspose.Cells.dll]
[csharp] view plain copy 1.添加引用: Aspose.Cells.dll(我们就叫工具包吧,可以从网上下载.关于它的操作我在“Aspose.Cells操作说明 中文版 下载 ...
随机推荐
- 《Java基础知识》Java技术总结
1. Java 知识点总结 Java标示符.保留字和数制:https://www.cnblogs.com/jssj/p/11114041.html Java数据类型以及变量的定义:https://ww ...
- linux中文件压缩介绍
原文内容来自于LZ(楼主)的印象笔记,如出现排版异常或图片丢失等问题,可查看当前链接:https://app.yinxiang.com/shard/s17/nl/19391737/1c62bb7f-f ...
- ETL子系统
最近在看<Pentaho Kettle 解决方案>,看到 ETL子系统,发现信息量比较大,用简短的语句做一下笔记. ETL子系统有34种子系统,被分成4个部分:抽取.清洗和更正.发布.管理 ...
- SpringCloud基础组件总结,与Dubbo框架、SpringBoot框架对比分析
本文源码:GitHub·点这里 || GitEE·点这里 一.基础组件总结 1.文章阅读目录 1).基础组件 Eureka组件,服务注册与发现 Ribbon和Feign组件,实现负载均衡 Hystri ...
- 原生JS实现动画函数的封装
封装了一个JS方法,支持元素的基本动画:宽.高.透明度...等,也支持链式动画和同时运动. 获取元素的属性的函数并进行了兼容性处理: function getStyle(obj, attr) { if ...
- Supermap/Cesium 开发心得----获取三维视角的四至范围
网上目前有两种获取当前Camera的四至范围的方法 方法一 这种方法是最通用的,即使在哥伦布视角(2.5D下依旧能准确获取值) function getCurrentExtent() { // ...
- 微信小程序之启动页的重要性
启动页在APP中是个很常见的需求,为什么对于小程序来说也非常重要呢?首先我描述一下我在开发过程中遇到的一些问题以及解决的步骤,到最后为什么要加启动页,看完你就明白了. 小程序的首页需要展示用户关注的小 ...
- 一起学SpringMVC之文件上传
概述 在Web系统开发过程中,文件上传是普遍的功能,本文主要以一个简单的小例子,讲解SpringMVC中文件上传的使用方法,仅供学习分享使用,如有不足之处,还请指正. 文件上传依赖包 如下所示,文件上 ...
- Consul初探-集成ocelot
前言 由于 Consul 的高可用性.丰富的API.友好的 Web 控制台界面等特点,Consul 的发展非常迅猛,得益于 .NETCore 社区的快速发展和社区成员的贡献,我们现在可以非常方便快速的 ...
- SpringBoot 并发登录人数控制
通常系统都会限制同一个账号的登录人数,多人登录要么限制后者登录,要么踢出前者,Spring Security 提供了这样的功能,本文讲解一下在没有使用Security的时候如何手动实现这个功能 dem ...