Excel 多表头导入导出(借助Aspose)
需求中Excell多表头,完成导入导出。

Aspose 代码实现多表头方式借助代码比较繁琐, 借助模板方式。 简化逻辑。 注意,aspose从0开始索引。
导入部分代码: 实现选择导入Excel,导入Excel后,转换成DataTable, 同时将列明替换成数据库映射字段。(注意,严谨情况下需要比对导入Excel和模板Excel列是否相同,此处逻辑省略。)
//读取Excel模板
var wb = new Workbook(Request.Files[0].InputStream);
if (wb.Worksheets.Count <= 0)
{
return Ext.Net.JSON.Serialize(new { success = false, msg = "不是有效的Excel文件" });
}
var ws = wb.Worksheets[0];
var sheet = ws;
//读取Excel内容并将DataTable表头转换为数据库字段。
//页面Grid集合
JavaScriptSerializer serializer = new JavaScriptSerializer();
serializer.MaxJsonLength = int.MaxValue;
var gridHeaders= new List<NameDataExeclOrderMap>().DeserializeModel(GridHeaders);
var GridModelsList = new { name = "", type = "" }.NMList().DeserializeModel(GridModels);
int firstStartDataRow = 3;
var ExcelDt = ws.Cells.ExportDataTableAsString(firstStartDataRow, 0, ws.Cells.MaxDataRow - firstStartDataRow + 1, gridHeaders.Count, false);
var ExcelRows = ExcelDt.Rows.Cast<DataRow>();
Func<int, string> ExcelColumnName2DTColumnName = (int colIndex) =>
{
return gridHeaders.Where(a => a.MapExcelColOrder == colIndex + 1).Select(a => a.DataIndex).FirstOrDefault();
};
for (var i = 0; i < ExcelDt.Columns.Count; i++)
{
var findCN = ExcelColumnName2DTColumnName(i);
if (!string.IsNullOrWhiteSpace(findCN))
{
ExcelDt.Columns[i].ColumnName = findCN;
}
}
//前台传送表头(用于显示,映射数据库字段,MapExcelColOrder )
public class NameDataExeclOrderMap
{
public int MapExcelColOrder {get;set;}
public string DataIndex { get; set; }
public string Text { get; set; }
}
需要前台传送的 表头格式:

导出模式(部分代码):
var ExcelTemplateFileName = Server.MapPath(@"\App_Data\ExcelTemplate\导入导出模板.xls");
Aspose.Cells.Workbook wb = new Aspose.Cells.Workbook(ExcelTemplateFileName);
var sheet = wb.Worksheets[0];
var cellRowIndex = 3; //Excel开始写的行
foreach (var row in dt.AsEnumerable())
{
foreach (var col in nameKeyMapOrderLst)
{
if (dt.Columns.Contains(col.DataIndex))
{
sheet.Cells[cellRowIndex, col.MapExcelColOrder - 1].PutValue(row.GetRowValue(col.DataIndex));
}
else
{
sheet.Cells[cellRowIndex, col.MapExcelColOrder - 1].PutValue("");
}
sheet.Cells[cellRowIndex, col.MapExcelColOrder - 1].SetStyle(_tdStyle);
}
cellRowIndex++;
}
string fileName = _reportName + "_" + DateTime.Now.ToString("yyyyMMddHHmmss") + ".xlsx";
wb.Save(System.Web.HttpContext.Current.Server.MapPath("~/ExportFile/") + fileName);
var Request = System.Web.HttpContext.Current.Request;
return "http://" + Request.Url.Host + ":" + Request.Url.Port + "/ExportFile/" + fileName;
Excel 多表头导入导出(借助Aspose)的更多相关文章
- 循序渐进开发WinForm项目(5)--Excel数据的导入导出操作
随笔背景:在很多时候,很多入门不久的朋友都会问我:我是从其他语言转到C#开发的,有没有一些基础性的资料给我们学习学习呢,你的框架感觉一下太大了,希望有个循序渐进的教程或者视频来学习就好了. 其实也许我 ...
- 利用PHPExcel 实现excel数据的导入导出(源码实现)
利用PHPExcel 实现excel数据的导入导出(源码实现) 在开发过程中,经常会遇到导入导出的需求,利用phpexcel类实现起来也是比较容易的,下面,我们一步一步实现 提前将phpexcel类下 ...
- SQL SERVER 与ACCESS、EXCEL的数据导入导出转换
* 说明:复制表(只复制结构,源表名:a 新表名:b) select * into b from a where 1<>1 * 说明:拷贝表(拷贝数据,源表名:a 目标表名:b) ...
- SSM excel文件的导入导出
对于excel文件的导入导出,后台接收读取和建表封存都是固定死的,所以对于excel导入时,excel文件内容必须匹配后台相关对象,不然报错. excel文件导出,用<a><a/&g ...
- SQL SERVER 和ACCESS、EXCEL的数据导入导出
SQL SERVER 与ACCESS.EXCEL之间的数据转换SQL SERVER 和ACCESS的数据导入导出[日期:2007-05-06] 来源:Linux公社 作者:Linux 熟 悉 ...
- VB中Excel 2010的导入导出操作
VB中Excel 2010的导入导出操作 编写人:左丘文 2015-4-11 近来这已是第二篇在讨论VB的相关问题,今天在这里,我想与大家一起分享一下在VB中如何从Excel中导入数据和导出数据到Ex ...
- 使用phpExcel实现Excel数据的导入导出(完全步骤)
使用phpExcel实现Excel数据的导入导出(完全步骤) 很多文章都有提到关于使用phpExcel实现Excel数据的导入导出,大部分文章都差不多,或者就是转载的,都会出现一些问题,下面是本人 ...
- Laravel 5使用Laravel Excel实现Excel/CSV文件导入导出的功能详解
1.简介 本文主要给大家介绍了关于Laravel 5用Laravel Excel实现Excel/CSV文件导入导出的相关内容,下面话不多说了,来一起看看详细的介绍吧. Laravel Excel 在 ...
- Spring Boot框架下实现Excel服务端导入导出
Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程.该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置.今天 ...
- Excel基于POI导入导出的Annotation化之路(一)
Excel在web项目里的使用变得越来越广泛,特别是和线下耦合度较高的业务,Excel导入导出变得非常频繁,尽管很多人写了诸多的工具方法,但是终究没有解决一个问题:有效的控制字段英文名称和实际表头名称 ...
随机推荐
- Linux下查找并杀死 zombile 和 stopped 进程
用top命令查看系统运行情况,突然发现stopped和zombile进程个数居然不是0. [root@myos software]# top top - 11:20:17 up 60 days, 17 ...
- 【Quartus系列】实验一: 3-8译码器(原理图输⼊设计)
实验一: 3-8译码器(原理图输⼊设计) ⼀:实验⽬的 1. 了解3-8译码器的电路原理,掌握组合逻辑电路的设计⽅法 2. 掌握QuartusII软件原理图输⼊设计的流程 ⼆:实验内容 2.1设计输⼊ ...
- Idea报错:Command line is too long.
https://blog.csdn.net/qq_40682764/article/details/109215368 run–>edit configurations–>你的项目–> ...
- Python用telnet设置,抓UDP抓采样点并显示
====main.bat==== echo off rem "d:\Program\WiresharkPortable64\App\Wireshark\tshark.exe" -- ...
- Qt excel操作相关
#include <QDebug> #include <QAxObject> #include <QStandardPaths> #include <QFil ...
- STM32F4 HAL库中是如何实现UART IO配置的?
1.配置串口IO.中断等底层的东西需要在用户文件中重写HAL_UART_MspInit函数2.hal库是在stm32f4xx_hal_msp.c文件中重写的HAL_UART_MspInit函数,分析如 ...
- Tomcat 配置文件详解之-- server.xml
一.背景 Tomcat隶属于Apache基金会,是开源的轻量级Web应用服务器,使用非常广泛.server.xml是Tomcat中最重要的配置文件,server.xml的每一个元素都对应了Tomcat ...
- 3. Tooltip 工具提示
1 <!DOCTYPE html> 2 <html lang="zh"> 3 <head> 4 <meta charset="U ...
- Mysql数据库基础第二章:(八)子查询经典案例
Mysql数据库基础系列 软件下载地址 提取码:7v7u 数据下载地址 提取码:e6p9 mysql数据库基础第一章:(一)数据库基本概念 mysql数据库基础第一章:(二)mysql环境搭建 mys ...
- continue练习
using System; namespace continue_的练习 { class Program { static void Main(string[] args) { int sum = 0 ...