NPOI操作excel(通过获取批注信息给excel动态赋值)
private string fileName = null; //文件名
private IWorkbook workbook = null;
private FileStream fs = null;
private IFormulaEvaluator evaluator = null;
if (fileName == "") return "";
int CurrentRow = 0;
ISheet sheet = null;
//把文件内容导入到工作薄当中,然后关闭文件
fs = new FileStream(fileName, FileMode.OpenOrCreate, FileAccess.ReadWrite);
if (fileName.IndexOf(".xlsx", StringComparison.Ordinal) > 0)
{ // 2007版本
workbook = new XSSFWorkbook(fs);
}
else if (fileName.IndexOf(".xls", StringComparison.Ordinal) > 0) // 2003版本
{
workbook = new HSSFWorkbook(fs);
}
fs.Close();//关闭文件
if (sheetName != null)
{
sheet = workbook.GetSheet(sheetName) ?? workbook.GetSheetAt(0);
}
else
{
sheet = workbook.GetSheetAt(0);
}
if (sheet != null)
{
//获取建设期
var cp =2
var rowCount = sheet.LastRowNum; //竖着数最后一行的标号
for (var i = sheet.FirstRowNum; i <= rowCount; i++)
{
#region 获取当前行的启起值和结束值(模块)
var row = sheet.GetRow(i);//获取当前行的启起值和结束值
if (row == null) continue;
#region 获取一行的启起值和一行的结束值作为循环条件(模块)
//获取一行的启起值和一行的结束值作为循环条件//int cellCount = row.LastCellNum; //一行最后一个cell的编号 即总的列数
for (int j = row.FirstCellNum; j < row.LastCellNum; j++)
{
#region 判断当前单元格数据不等空(模块)
if (row.GetCell(j) == null || row.GetCell(j).CellComment == null) continue;
var Par = new List<SqlParameter>(); //sql参数化
var sd = row.GetCell(j).ToString();
#region 判断当前单元格批注不等空(模块)
var annotation = ((row.GetCell(j).CellComment.String.ToString().Replace("\n", "")).Replace("\r", "")).Trim();//获取当前单元格的批注
#region 获取excel起启行结束行
//如果相等记录当前行
if (annotation.Equals("open", StringComparison.OrdinalIgnoreCase))
{
CurrentRow = i; //记录当前excel行
}
else
{
//Convert.ToInt32(cp.Constant); //建设期
//解析单元格批注内容
string[] dataArr = annotation.Split('_');
string symbol = "";
if (dataArr.Length < 1) continue;
Par.Add(new SqlParameter("@SID", R_ID));
var arr = dataArr[1].Split('|');//获取值判断是否排除建设期
if (arr.Length > 1)
{
Par.Add(new SqlParameter("@gid", arr[0]));
}
else
{
var ffda = dataArr[1].Split('~');//判断是否有符号
if (ffda.Length > 1)
{
symbol = ffda[1];
Par.Add(new SqlParameter("@gid", ffda[0]));
}
else
{
Par.Add(new SqlParameter("@gid", dataArr[1]));
}
}
#region 执行存储过程过程获取数据
//执行存储过程
var dataTable = DbHelperSQL.RunStoredProcedure(dataArr[0].ToString(), Par.ToArray());//
if (dataTable.Rows.Count > 0)
{
var data = CommFunHelper.GetDataTableByKeyValue(dataTable);
if (dataArr[0].ToString().Equals("InternalFunds", StringComparison.OrdinalIgnoreCase) || dataArr[0].ToString().Equals("ProjectInternalRemuneration", StringComparison.OrdinalIgnoreCase))
{
#region keyValues取值方式
var value = "";
for (var k = 1; k <= sheet.GetRow(CurrentRow).LastCellNum; k++)
{
var va = sheet.GetRow(CurrentRow).GetCell(j + k);
if (va == null) continue;
var rowArr = va.ToString().Split('-');
if (rowArr.Length > 1)
{
if (data.ContainsKey(rowArr[1]))
{
value = data[rowArr[1]] + symbol;
}
else
{
value = null;
}
}
else
{
if (data.ContainsKey(va.ToString()))
{
value = data[va.ToString()] + symbol;
}
else
{
value = null;
}
}
if (arr.Length <= 1)
{
if (k <= Convert.ToInt32(cp.Constant))
{
value = "";
}
}
if (value == null) continue;
//先获取单元格的值再设置单元格的边框线再赋值不然.......自己看着办
row.CreateCell(j + k).CellStyle.BorderLeft =
BorderStyle.Thin; //设置左边框线
row.CreateCell(j + k).CellStyle.BorderBottom =
BorderStyle.Thin; //设置下边框线
row.CreateCell(j + k).CellStyle.BorderTop =
BorderStyle.Thin; //设置上边框线
row.CreateCell(j + k).CellStyle.BorderRight =
BorderStyle.Thin; //设置右边框线
row.CreateCell(j + k).SetCellValue(value);
//row.CreateCell(j + k).SetCellFormula("sum(A1,B1)");使用计算公式
}
#endregion
}
else
{
var value = dataTable.Rows[0][0] == DBNull.Value ? "" : dataTable.Rows[0][0].ToString();
//先获取单元格的值再设置单元格的边框线再赋值不然.......自己看着办
row.CreateCell(j + 1).CellStyle.BorderBottom =
BorderStyle.Thin; //设置下边框线
row.CreateCell(j + 1).CellStyle.BorderRight =
BorderStyle.Thin; //设置下边框线
row.CreateCell(j + 1).SetCellValue(value + symbol);
}
}
#endregion
}
#endregion
row.GetCell(j).RemoveCellComment();//删除当前单元格批注信息
#endregion
#endregion
}
#endregion
#endregion
}
#region 保存文件
string filePath = ConfigurationSettings.AppSettings["ExSave"];
string FileName = R_ID + "_" + az + "_" + ".xlsx";
var strFullName = Server.MapPath(filePath) + "\\" + FileName;
using (FileStream fileStream = System.IO.File.Create(strFullName))
{
workbook.Write(fileStream);
fileStream.Close();
}
//XlsToImg(strFullName, Path.ChangeExtension(strFullName, ".png"));
#endregion
return filePath + "/" + Path.ChangeExtension(FileName, ".png");
}
NPOI操作excel(通过获取批注信息给excel动态赋值)的更多相关文章
- Aspose.cell C# 操作excel(通过批注信息给单元格赋值、批注信息获取公式得出结果并转PNG)
if (fileName == "") return ""; var CurrentRow = 0; Workbook work = new Workbook( ...
- 通过NPOI操作Excel
最近在做的一个项目中需要生成Excel,通过学习使用NPOI实现了相关需求,写了一个简便操作的类,记录如下: public class NPOIHelperForExcel { #region exc ...
- NPOI操作EXCEL(二)——大量不同模板时设计方式
上一篇文章介绍了一些NPOI的基础接口,我们现在就来看看具体怎么用NPOI来解析一个EXCEL. 博主现在有这么一堆excel需要解析数据入库: 当然这只是员工的简要模板,还有很多其他的模板.我们可以 ...
- C# 如何使用NPOI操作Excel以及读取合并单元格等
C#操作Excel方法有很多,以前用的需要电脑安装office才能用,但因为版权问题公司不允许安装office.所以改用NPOI进行Excel操作,基本上一些简单的Excel操作都没有问题,读写合并单 ...
- NPOI操作之一EXCEL数据导入数据库
一.概要 前面讲到NPOI操作EXCEL导出功能,下面讲下从EXCEL里获取数据添加进数据库. 二.代码 HSSFWorkbook hssfworkbook; public void ExcelDat ...
- 用NPOI操作EXCEL-锁定列CreateFreezePane()
public void ExportPermissionRoleData(string search, int roleStatus) { var workbook = new HSSFWorkboo ...
- .NET 通过 NPOI 操作 Excel
目录 .NET 通过 NPOI 操作 Excel 第一步:通过 NuGet 获取 NPOI 包并引入程序集 第二步:引入 NPOI 帮助类 第三步:在程序中调用相应的方法对数据进行导出导入操作 将 D ...
- 使用NPOI操作Excel文件及其日期处理
工作中经常遇到需要读取或导出Excel文件的情况,而NPOI是目前最宜用.效率最高的操作的Office(不只是Excel哟)文件的组件,使用方便,不详细说明了. Excel工作表约定:整个Excel表 ...
- 个人永久性免费-Excel催化剂功能第55波-Excel批注相关的批量删除作者、提取所有批注信息等
Excel里的批注,许多人很喜欢用,但批注真的值得我们大量使用吗?批注的使用场景在哪里?这些问题可能更值得花时间来思考下.同样因为不规范地使用批注,也带出了一大堆的后续擦屁股的事情来,从批注中找回有价 ...
随机推荐
- 搭建一个最简单的node服务器
搭建一个最简单的node服务器 1.创建一个Http服务并监听8888端口 2.使用url模块 获取请求的路由和请求参数 var http = require('http'); var url = r ...
- Base class for cloning an object in C#
Base class for cloning an object in C# /// <summary> /// BaseObject class is an abstract class ...
- BZOJ2438: [中山市选2011]杀人游戏(tarjan)
题意 题目链接 Sol 这题挺考验阅读理解能力的.. 如果能读懂的话,不难发现这就是在统计有多少入度为\(0\)的点 缩点后判断一下即可 当然有一种例外情况是\(1 -> 3, 2 -> ...
- pId的数据结构转children 数据结构(JS);
在工作中经常遇到需要把带有pId的的list数据转换为children格式的树形结构,一直都没有找到太好的工具函数.偶然间看到了这个函数,研究了下,感觉这个函数很强大,所以记录下来,作为备用,同时也贴 ...
- 移动端点击a链接出现蓝色背景问题解决
a:link, a:active, a:visited, a:hover { background: none; -webkit-tap-highlight-color: rgba(0,0,0,0); ...
- 自封装ajax
项目中有时候用不到jq,需要了解xmlhttp原理,自己写一套函数请求和发送数据! /* 封装ajax函数 * @param {string}opt.type http连接的方式,包括POST和GET ...
- Fiddler-修改HTTP请求参数
在进行 App 测试时,经常需要修改请求参数,以获得不同的显示效果,以查看相应的页面显示处理.例如:可以通过修改 HTTP请求 的参数,来获取不同的响应结果. 下面以修改 HTTP请求的商品系统编号为 ...
- 自动装配(AutoWire)
根据 autowire 的配置选择装配策略 byName 选择和属性名 name 一致的 bean 进行装配: byType 根据类型选择,如果对应的类型匹配到多个bean,则会报错,如下配置: &l ...
- matlab中repmat函数的用法(堆叠矩阵)
matlab中repmat函数的用法 B = repmat(A,m,n) B = repmat(A,[m n]) B = repmat(A,[m n p...]) 这是一个处理大矩阵且内容有重复时使用 ...
- javascript typeof()的用法与运算符用法
typeof 运算符 返回一个用来表示表达式的数据类型的字符串. typeof[()expression[]] ; expression 参数是需要查找类型信息的任意表达式. 说明 typeof 运算 ...