在C#中关于excel的导入和导出操作
一、先来看看最常见的导入操作吧!

private void Import()
{
//打开excel选择框 OpenFileDialog frm = new OpenFileDialog();
frm.Filter = "Excel文件(*.xls,xlsx)|*.xls;*.xlsx";
if (frm.ShowDialog() == DialogResult.OK)
{
string excelName = frm.FileName;
Workbook excel = new Workbook(excelName);
List<string[]> importyString=GetImportExcelRoute(excel); }}


//循环遍历获取excel的中每行每列的值 public List<string[]> GetImportExcelRoute(Workbook excel)
{
int icount = excel.Worksheets.Count;
List<string[]> routList = new List<string[]>();
for (int i = 0; i < icount; i++)
{
Worksheet sheet = excel.Worksheets[i];
Cells cells = sheet.Cells;
int rowcount = cells.MaxRow;
int columncount = cells.MaxColumn;
int routNameColumn = 0;
int routAttachColumn = 0;
int routDescColumn = 0;
int routMesgColumn = 0;
//获取标题所在的列 if (rowcount > 0 && columncount > 0)
{
//找到对应的列信息
int r0 = 2;
for (int c = 0; c <= columncount; c++)
{
string strVal = cells[r0, c].StringValue.Trim();
if (strVal == "备注")
{
routDescColumn = c;
break;
}
}
r0 = 3;
for (int c = 0; c <= columncount; c++)
{
//获取文本框内容
string strVal = cells[r0, c].StringValue.Trim();
if (strVal == "审批明细事项")
{
routNameColumn = c;
}
if (strVal == "细项")
{
routMesgColumn = c;
}
if (strVal == "前置条件及工作要求")
{
routAttachColumn = c;
}
}
//找到对应标题列下面的值
if (routNameColumn > 0 && routAttachColumn > 0 && routDescColumn > 0)
{//在从对应的列中找到对应的值
for (int r = 4; r <= rowcount; r++)
{
string[] str = new string[6];
string strRoutName = "";
string strRoutMesg = "";
string strRoutAttach = "";
string strRoutDesc = "";
string strRoutRole = "";
string strRoutPro = "";
for (int c = 0; c <= columncount; c++)
{
int mergcolumncount = 0;
int mergrowcount = 0;
bool ismerged = cells[r, c].IsMerged;//是否合并单元格
if (ismerged)
{
Range range = cells[r, c].GetMergedRange();
if (range != null)
{
mergcolumncount = range.ColumnCount;
mergrowcount = range.RowCount;
}
}
//获取文本框内容
string strVal = "";
strVal = cells[r, c].StringValue.Trim();
if (c == routNameColumn)
{
strRoutName = strVal;
if (mergrowcount > 1 && string.IsNullOrEmpty(strRoutName))
{
strRoutName = GetRoutName(routList, 0);
}
}
if (c == routMesgColumn)
{
strRoutMesg = strVal;
if (mergrowcount > 1 && string.IsNullOrEmpty(strRoutMesg))
{
strRoutMesg = GetRoutName(routList, 1);
}
}
if (c == routAttachColumn)
{
strRoutAttach = strVal;
}
if (c == routDescColumn)
{
strRoutDesc = strVal;
}
} } }

可以看到导入是比较简单的,就是循环读取每行每列的值,可以看到文中有不少Cells这个属性,这个需要用到第三方的插件:using Aspose.Cells;需要在网上下载一个 Aspose.Cells的dll.
二、导出,就是将数据组合好后导成excel格式:

private void Export()
{
SaveFileDialog frm = new SaveFileDialog();
frm.Filter = "Excel文件(*.xls,xlsx)|*.xls;*.xlsx";
frm.FileName = flowName + ".xlsx";
if (frm.ShowDialog() == DialogResult.OK)
{
string strpath = frm.FileName;
Workbook workbook = null; string strpath = _exportFlowRoutExcelPath; if (File.Exists(strpath)) { workbook = new Workbook(strpath); } else { workbook = new Workbook(); } Worksheet sheet = workbook.Worksheets[0]; //工作表 Cells cells = sheet.Cells;//单元格 string str="";//获取要导出的数据
try { RoutExportToExcel(workbook,cells,str);
MessageBox.Show("导出成功!");
} catch {
MessageBox.Show("导出失败!");
}
}
}
}


public void RoutExportToExcel(Workbook workbook, Cells cells,string str)
{
分别得到行和列
int routCount =0;//;
int rowcount = 4 + routCount;
int columnCount = 25;
for (int i = 0; i < rowcount; i++)
{
Style style = SettingCellStyle(workbook, cells);
if (i == 0)
{
style.Font.Color = Color.Red;
style.Font.Size = 16;
cells.Merge(0, 0, 1, columnCount);//合并单元格
cells[i, 0].PutValue("综合管线决策授权体系事项");//填写内容
cells[0, 0].SetStyle(style);//给单元格关联样式
cells.SetRowHeight(0, 38);//设置行高
cells.SetColumnWidth(1, 20);//设置列宽
}
if (i > 0)
{
string routeName = "";
string routeNote = "";
string routeCondition = "";
string guid = "";
if (i > 3)
{
cells.SetRowHeight(i, 42);//设置行高
JsonObject routJsonObj = routeJsonArray[i - 4] as JsonObject;
routeName = routJsonObj["routName"] == null ? "" : routJsonObj["routName"].ToString();
routeNote = routJsonObj["note"] == null ? "" : routJsonObj["note"].ToString();
routeCondition = routJsonObj["condition"] == null ? "" : routJsonObj["condition"].ToString();
guid = routJsonObj["guid"] == null ? "" : routJsonObj["guid"].ToString();
}
for (int j = 0; j < columnCount; j++)
{
cells[i, j].SetStyle(style);//给单元格关联样式
//填充行
if (i > 3)
{
if (j == 0)//序号
{
cells[i, j].PutValue(i - 3);//填写内容
}
else if (j == 4 || j == 5 || j == 24)//审批明细事项 细项 备注
{
FillExcelRoutProperty(i,j,style,cells,routeName,routeNote,routeCondition);
}
else if (j == 2 || j == 3 || j == 6 || j == 7 || j == 8 || j == 10 || j == 11 || j == 12 || j == 13)//类别、分类、层级或板块、地区、管线、前置条件责任部门及责任人、审核校对验收责任部门及责任人、具体审核校对验收要求、发起人
{
FillExcelRoutExtProperty(i, j, guid, style, cells,routExtPropertyJsonArray);
}
else if (j >= 14 && j <= 23)//路由角色变量(从审批人1到终审人)
{
FillExcelRoutRoleVal(i,j,guid,style,cells,routRoleValjsonArray);
}
else if (j == 9)//前置条件及工作要求
{
FillExcelRoutPreConditon(i,j,guid,style,cells,routPreConditonJsonArray);
}
}
else
{
SettingCellStyleAndLine(cells, i, j);//设置excel的标题行和列
}
}
}
}
}


/// <summary>
/// 设置单元格样式及线条
/// </summary>
/// <param name="cells"></param>
/// <param name="i"></param>
/// <param name="j"></param>
public void SettingCellStyleAndLine(Cells cells, int i, int j)
{
if (i == 1)
{
if (j == 0)
{
cells.Merge(1, j, 3, 1);//合并单元格
cells[i, j].PutValue("序号");//填写内容
cells.SetColumnWidth(j, 5);//设置列宽
}
if (j == 1)
{
cells.Merge(1, j, 3, 1);//合并单元格
cells.SetColumnWidth(j, 5);//设置列宽
}
}
}


/// <summary>
/// 设置单元格的样式
/// </summary>
/// <param name="workbook"></param>
/// <param name="cells"></param>
/// <returns></returns>
public Style SettingCellStyle(Workbook workbook, Cells cells)
{
Style style = workbook.Styles[workbook.Styles.Add()];//新增样式
style.HorizontalAlignment = TextAlignmentType.Center;//文字居中
style.Font.Name = "宋体";//文字字体
style.Font.Size = 10;//文字大小
style.IsLocked = false;//单元格解锁
style.Font.IsBold = false;//粗体
style.ForegroundColor = Color.FromArgb(255, 255, 255);//设置背景色
style.Pattern = BackgroundType.Solid; //设置背景样式
style.IsTextWrapped = true;//单元格内容自动换行
style.Borders[BorderType.LeftBorder].LineStyle = CellBorderType.Thin; //应用边界线 左边界线
style.Borders[BorderType.RightBorder].LineStyle = CellBorderType.Thin; //应用边界线 右边界线
style.Borders[BorderType.TopBorder].LineStyle = CellBorderType.Thin; //应用边界线 上边界线
style.Borders[BorderType.BottomBorder].LineStyle = CellBorderType.Thin; //应用边界线 下边界线
return style;
}
在C#中关于excel的导入和导出操作的更多相关文章
- SpringBoot中关于Excel的导入和导出
前言 由于在最近的项目中使用Excel导入和导出较为频繁,以此篇博客作为记录,方便日后查阅.本文前台页面将使用layui,来演示对Excel文件导入和导出的效果.本文代码已上传至我的gitHub, ...
- 表格类型数据,Excel csv导入,导出操作
import pandas # 创建表格格式# ad = pandas.DataFrame({"a": range(1, 10), "b": range(10, ...
- 前端必读3.0:如何在 Angular 中使用SpreadJS实现导入和导出 Excel 文件
在之前的文章中,我们为大家分别详细介绍了在JavaScript.React中使用SpreadJS导入和导出Excel文件的方法,作为带给广大前端开发者的"三部曲",本文我们将为大家 ...
- excel的导入与导出---通用版
excel的导入与导出---通用版 web项目关于导入导出的业务场景很常见,最近我就又遇到了这个业务场景.这次将最近半个月做的导入导出总结一下 使用的pom如下,主要还是阿里巴巴的easyexcel依 ...
- .net数据库实现Excel的导入与导出
.net数据库实现Excel的导入与导出 参考路径:https://www.cnblogs.com/splendidme/archive/2012/01/05/2313314.html 1.defau ...
- C#中Excel的导入和导出的几种基本方式
在上一篇(http://www.cnblogs.com/fengchengjushi/p/3369386.html)介绍过,Excel也是数据持久化的一种实现方式.在C#中.我们常常会与Excel文件 ...
- Excel报表开发(主要讲Excel的导入和导出)
一.Excel数据导入 连接字符串Excel2003版: OleDbConnection conn = new OleDbConnection("provider=Microsoft.Jet ...
- java实现Excel的导入、导出
一.Excel的导入 导入可采用两种方式,一种是JXL,另一种是POI,但前者不能读取高版本的Excel(07以上),后者更具兼容性.由于对两种方式都进行了尝试,就都贴出来分享(若有错误,请给予指正) ...
- SpringBoot整合easyexcel实现Excel的导入与导出
导出 在一般不管大的或者小的系统中,各家的产品都一样,闲的无聊的时候都喜欢让我们这些程序员导出一些数据出来供他观赏,非说这是必须需求,非做不可,那么我们就只能苦逼的哼哧哼哧的写bug喽. 之前使用PO ...
随机推荐
- 虚反矩阵指令pinv之应用
pinv指令 在多数解的例子中,有时并不是仅要将其中一变数设定为零之解.为使整个系统得到最佳化,亦可利用pinv指令求得最小模组之合理解.pinv(A)又称为虚反矩阵(pseudoinvers ...
- Chomp!游戏 (组合游戏Combinatorial Games)
http://blog.csdn.net/acdreamers/article/details/17021095 有一个n*m的棋盘,每次可以取走一个方格并拿掉它右边和上面的所有方格.拿到左下角的格子 ...
- 关于c#生成word。
需求:需要把数据做成这样的效果.一个页面展示一个r单子数据. object filename = ""; Object Nothing = System.Reflection.Mi ...
- aspx文件移动到新建的文件夹中设置路径的问题
项目中仅仅把aspx移动到想要的文件夹内是会出错的,不用想也知道是路径问题.这里我就说这个路径该如何去修改. 两个地方需要修改:1.母版路径修改方法: <link href="Styl ...
- C# 预处理指令
导读 1.什么是预处理 2.预处理的好处 3.C#中的常见预处理指令 4.总结 什么是预处理 在计算机科学中,预处理通常是指利用某一程序(通常是预处理器)对某一格式的源码(如.cs C ...
- php json_encode()和json_decode()
json_encode()和json_decode()分别是编译和反编译过程 注意json只接受utf-8编码的字符,所以json_encode()的参数必须是utf-8编码,否则会得到空字符或者nu ...
- 如何自动拼接 Update语句,仅Update已修改的字段
我们通常使用update语句更新数据库记录,例如使用update user set username='001', nickname='Tom', age=18 where id = 1语句更新use ...
- jQuery 中的防冲突(noConflict)机制
许多的 JS 框架类库都选择使用 $ 符号作为函数或变量名,jQuery 是其中最为典型的一个.在 jQuery 中,$ 符号只是 window.jQuery 对象的一个引用,因此即使 $ 被删除,w ...
- git 使用事项
基本安装可查看 http://help.github.com 如果删除了本地的文件,要恢复相关文件,在github存在(别人增加的),则:git pull <远程主机名> <远程分支 ...
- POJ1384完全背包问题
题目大意:给你一个储蓄罐空的,和满的重量,然后给出各种硬币的价值和对应的重量,要你估计出储蓄罐里面硬币价值和最小为多少,注意要保证重量和恰好为给出满的重量解题思路:完全背包问题,只是求最小值,注意初始 ...