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里的批注,许多人很喜欢用,但批注真的值得我们大量使用吗?批注的使用场景在哪里?这些问题可能更值得花时间来思考下.同样因为不规范地使用批注,也带出了一大堆的后续擦屁股的事情来,从批注中找回有价 ...
随机推荐
- ExcelHelper office 导出
要是服务器上没有装着excel 可以用c#导出excel表吗 2009-08-10 17:36 风之成 | 分类:办公软件 | 浏览2279次 租用的空间 服务器上没有装着office excel,可 ...
- 在 Azure Web 应用中创建 PHP 应用程序
本分步指南将通过 Azure Web 应用帮助您启动并运行示例 PHP 应用程序.除 PHP 外,Azure Web 应用还支持其他语言,如 Java..NET.Node.JS.Python.Ruby ...
- jQuery之设置元素内容(移动和复制元素,使用append(),appendTo()方法)
jQuery之设置元素内容(移动和复制元素,使用append(),appendTo()方法) ---------- 如果想把内容添加到现有内容末尾,可以利用append()命令.append()命令语 ...
- 001Angular2环境准备
01.安装Node.js 和 npm 安装完成后,在命令行依次使用node -v 和 npm -v可以看到版本号. 02.安装cnpm npm需要连接谷歌服务器,国内不能正常使用,需安装cnpm.命令 ...
- Avro-RPC client in Flume
Avro used in Flume Define the interface of RpcClient public interface RpcClient { public int getBatc ...
- GridView简单使用
如图是效果图 今天看到看到这个代码发现一个问题 就是我的listView的布局不对 我的GridView的 android:layout_height="wrap_content&quo ...
- Flask博客类登录注册验证模块代码(十四)
1 文件系统 blog #博客类 App forms #表单 __init__.py user.py models #模型 __init__.py user.py static #静态文件 templ ...
- iBrand 开源电商小程序 (Laravel API+ webpack + gulp + 原生小程序)
iBrand 社交电商产品正式进入开源过程中了,我们制定了详细的开源计划,目前已经发布了 V1 的版本,后续的版本也在陆续整理完善中. 各个版本功能明细如下图: 3 个版本计划在今年春节前全部完成,可 ...
- elenium2学习(十六)-- 富文本(自动发帖)
前言 富文本编辑框是做web自动化最常见的场景,有很多小伙伴遇到了不知道无从下手,本篇以博客园的编辑器为例,解决如何定位富文本,输入文本内容 一.加载配置 1.打开博客园写随笔,首先需要登录,这里为了 ...
- github 专案介绍 – Python 范例:透过互动式的 Jupyter 和数学解释流行的机器学习演算法
对于机器学习有兴趣,不少人应该会先从 Andrew Ng ( 吴恩达 ) 的机器学习课程开始,但是吴恩达的课程是使用 octave 这个工具当作练习.这个 github 项目包含使用 Python 实 ...