Aspose.cell C# 操作excel(通过批注信息给单元格赋值、批注信息获取公式得出结果并转PNG)
if (fileName == "") return "";
var CurrentRow = 0;
Workbook work = new Workbook(fileName);
var sheet = work.Worksheets[0];
string name = "";
if (sheet != null)
{
name = sheet.Name;
//获取建设期
var cp = 10;
var rowCount = sheet.Cells.MaxDataRow; //竖着数最后一行的标号
for (var i = sheet.Cells.MinColumn; i <= rowCount; i++)
{
//sql参数化
var Par = new List<SqlParameter>();
#region 获取当前行的启起值和结束值(模块)
var row = sheet.Cells.GetRow(i);//获取当前行的启起值和结束值
if (row.FirstCell == null) continue;
var totalRow = 0; //记录合计当前行
#region 获取一行的启起值和一行的结束值作为循环条件(模块)
//获取一行的启起值和一行的结束值作为循环条件//int cellCount = row.LastCellNum; //一行最后一个cell的编号 即总的列数
for (int j = sheet.Cells.MinDataColumn; j < sheet.Cells.MaxDataColumn; j++)
{
#region 判断当前单元格数据不等空(模块)
if (sheet.Cells[i, j].StringValue.Trim()== null || sheet.Comments[i, j] == null) continue;
var sd = sheet.Cells[i, j].StringValue.Trim();//I当前行J当前列
#region 判断当前单元格批注不等空(模块)
var annotation = ((sheet.Comments[i, j].Note.ToString().Replace("\n", "")).Replace("\r", "")).Trim();//获取当前单元格的批注
if (annotation.IndexOf('=')>-1)
{
sheet.Cells[(sheet.Cells[i, j]).Name].Formula = "=SUM(D7:O7)";
work.CalculateFormula();
string value = sheet.Cells[(sheet.Cells[i, j]).Name].Value.ToString();
//sheet.Cells[(sheet.Cells[i, j]).Name].PutValue(value);
break;
}
#region 获取excel起启行结束行
//如果相等记录当前行
if (annotation.Equals("open", StringComparison.OrdinalIgnoreCase))
{
CurrentRow = i; //记录当前excel行
}
else
{
//解析单元格批注内容
string[] dataArr = annotation.Split('_');
string symbol = "";
string[] special = new string[0];
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
{
//判断是否特殊赋值方式
special = dataArr[1].Split('\\');
Par.Add(special.Length > 1
? new SqlParameter("@gid", special[0])
: new SqlParameter("@gid", dataArr[1]));
}
}
//执行存储过程
var data = CommFunHelper.GetDataTableByKeyValue(DbHelperSQL.RunStoredProcedure(dataArr[0].ToString(), Par.ToArray()));
if (data.Count <= 0) continue;
var nums = 0;
var value = "";
#region 往excel赋值部分
for (var k = 0; k <= (sheet.Cells.GetRow(CurrentRow)).LastDataCell.Column; k++)
{
var va = sheet.Cells.GetRow(CurrentRow)[k].StringValue;
if (va == null) continue;
var num = System.Text.RegularExpressions.Regex.Replace(va.ToString(),
@"[^0-9]+", "");
if (!data.ContainsKey(num)) continue;
nums++;
if (special.Length > 1)
{
if (nums <= Convert.ToInt32(cp.Constant))
{
if (!string.IsNullOrEmpty(data[num]))
{
sheet.Cells[i, j + k].PutValue(Convert.ToDouble(data[num])); //当前行
sheet.Cells[i + 1, j + k]
.PutValue(Convert.ToDouble(data[num])); //当前行的下一行
}
else
{
sheet.Cells[i, j + k].PutValue(data[num]); //当前行
sheet.Cells[i + 1, j + k].PutValue(data[num]); //当前行的下一行
}
}
else
{
if (!string.IsNullOrEmpty(value))
{
sheet.Cells[i, j + k].PutValue(Convert.ToDouble(data[num])); //当前行
sheet.Cells[i + 1, j + k]
.PutValue(Convert.ToDouble(data[num])); //当前行的下一行
}
else
{
sheet.Cells[i, j + k].PutValue(data[num]); //当前行
sheet.Cells[i + 1, j + k].PutValue(data[num]); //当前行的下一行
}
}
}
else
{
value = data[num];
if (arr.Length <= 1)
{
if (nums <= Convert.ToInt32(cp.Constant))
{
value = "";
}
}
if (!string.IsNullOrEmpty(value))
{
sheet.Cells[i, j + k].PutValue(Convert.ToDouble(data[num])); //当前行
}
else
{
sheet.Cells[i, j + k].PutValue(data[num]); //当前行
}
}
}
#endregion
}
#endregion
#endregion
#endregion
}
#endregion
#endregion
}
sheet.ClearComments();//清除所有批注信息
#region 保存文件
var filePath = ConfigurationSettings.AppSettings["ExSave"];
var FileName = R_ID + "_" + az + name + "_" + ".xlsx";
var strFullName = Server.MapPath(filePath) + "\\" + FileName;
work.Save(strFullName);
XlsxToImg(work, Path.ChangeExtension(strFullName, ".png"));
#endregion
return filePath + "/" + Path.ChangeExtension(FileName, ".png");
}
/// <summary>
/// xlsx转图片
/// </summary>
/// <param name="filePath"></param>
/// <param name="paths"></param>
private static void XlsxToImg(Workbook book, string paths)
{
//string filename = Path.GetFileNameWithoutExtension(filePath).ToLower();
//Workbook book = new Workbook(filePath);
//创建一个图表选项的对象
Aspose.Cells.Rendering.ImageOrPrintOptions imgOptions = new Aspose.Cells.Rendering.ImageOrPrintOptions();
imgOptions.AllColumnsInOnePagePerSheet = true; //如果AllColumnsInOnePagePerSheet为true,则一个工作表的所有列内容将仅输出到结果中的一个页面。pagesetup的纸张大小宽度无效,pagesetup的其他设置仍然有效
imgOptions.OnePagePerSheet = true; //一个工作表的所有列内容将仅输出到结果中的一个页面
imgOptions.ImageFormat = ImageFormat.Png;
//imgOptions.IsCellAutoFit = true;
int count = book.Worksheets.Count;
for (int i = 0; i < count; i++)
{
//获取一张工作表
Worksheet sheet = book.Worksheets[i];
//创建一个纸张底色渲染对象
var sr = new Aspose.Cells.Rendering.SheetRender(sheet, imgOptions);
for (int j = 0; j < sr.PageCount; j++)
{
var imgpath = paths;
if (!System.IO.File.Exists(imgpath))
{
sr.ToImage(j, imgpath);
}
}
}
}
Aspose.cell C# 操作excel(通过批注信息给单元格赋值、批注信息获取公式得出结果并转PNG)的更多相关文章
- c#操作Excel模板,替换命名单元格或关键字形成报表
c#操作Excel模板,替换命名单元格或关键字形成报表 http://blog.sina.com.cn/s/blog_45eaa01a0102vqma.html一 建立Excel 模板文件 templ ...
- 如何用Apache POI操作Excel文件-----如何对一个单元格加注解?
有的时候,我们需要通过操作Apache POI,在生成Cell数据的同时,能对其生成的Cell,加上注解(comments),类似于下面的. 那么对于这种情况,我们的代码应该如何写呢? 借花献佛,我就 ...
- 使用Aspose.Cell.dll导出Excel总结
这两天项目上用Aspose导出Excel来着.开始感觉挺简单的,但是实际操作起来还是挺复杂的,调试占的时间很长.主要是动态生成列.合并单元格.调样式占了很长时间,还是总结一下吧. 基础操作: //EX ...
- java excel给单元格增加批注(包含SXSSF)
package javatest; import java.io.FileOutputStream; import java.io.IOException; import org.apache.poi ...
- jxl获取excel中的合并的单元格(主要是方法介绍)
Range[] rangeCells = sheet.getMergedCells();// 返回sheet中合并的单元格数组 for (Range r : rangeCells) {//对数组遍历拿 ...
- 怎样将Excel包含某字符的单元格填充颜色
在处理数据的时候,xmyanke想将Excel中包含某字符的单元格填充蓝色,比较容易看清,弄了好一阵子都没完成,最后试用条件格式处理了一下,终于实现了. 比如要将A1到A12区间包含数字1的单元格填充 ...
- 根据路径获得文件名以及Aspose.Cells.dll操作excel 以及使用iTextSharp.text.pdf.PdfReader.dll对PDF的操作
string result = Regex.Match(str,@"[^\\]+$").Value;//正则表达式 this.listBox1.Items.Add(Path.Get ...
- 在excel单元格中提取信息
平时在excel中处理数据的时候,肯定会遇到在单元格提取信息的情况,比如在地址中提取省.市.地区等,如果数据源内容规整的话,可以直接使用left().right().mid()等函数直接提取,但是大多 ...
- POI读取单元格信息及单元格公式
Java操作EXCEL的利器一般都是POI和JXL,鄙人只是POI的忠实粉丝.(其实我是没有用过JXL). 现在大多数的excel都是07以上的版本,所以我一般是用07的基础上使用POI. 一.读取单 ...
随机推荐
- 文档碎片DocumentFragment
文档碎片是什么? 参考标准的描述,DocumentFragment是一个轻量级的文档对象,能够提取部分文档的树或创建一个新的文档片段,换句话说有文档缓存的作用. createDocumentFragm ...
- WCF寄宿在C#控制台,并用命令行启动
公司运用wcf比较多,所以自己研究一下寄宿做个笔记,wcf寄宿在控制台有两种方式 第一种,直接在控制台程序内添加wcf服务. 第二种分别添加控制台程序和wcf服务应用程序,前者引用后者,并在app.c ...
- 【学习笔记】Java中生成对象的5中方法
概述:本文介绍以下java五种创建对象的方式: 1.用new语句创建对象,这是最常用的创建对象的方式. 2.使用Class类的newInstance方法 3.运用反射手段,调用java.lang.re ...
- String常用操作
常量池: 字符串一旦被初始化就不会被改变 String s="123"; s="abc"; System.out.print(s); 这段代码看上去s的值是被改 ...
- dubbo-admin网页管理控制台
由于近段时间在看dubbo,网上找到的这个war包发布到tomcat报错,故从git(https://github.com/apache/incubator-dubbo-ops)上重新下载编译了版本 ...
- python dict list tuple
Dict 创建 somedict = {} somedict = {"key": value} a = dict(one=1, two=2, three=3) c = dict(z ...
- WinSock2 API
title: WinSock2 API tags: [WinSock, 网络编程, WinSock2.0 API, 动态加载, WinSock 异步函数] date: 2018-07-21 10:36 ...
- Canvas绘制图片模糊
canvas是html5的新标签,是个可以绘制图形的画布,画布的默认大小为300x150.在自定义绘制画布大小的时候有注意的问题,就是用样式来设置高度和宽度的时候 比如 <div style=& ...
- 学习 JavaScript 树
学习 JavaScript 树 树(Tree) 在计算机科学中,数据结构是一门研究非数值计算的程序设计问题中计算机的操作对象(数据元素)以及它们之间的操作和运算等的学科. 它包含三方面的内容: 数据的 ...
- Vbox安装CentOS7及网络配置
安装CentOS7及网络配置 Vbox和其他虚拟机一样,安装完成一个虚拟机,需要配置网络才能实现物理主机和虚拟机之间的访问.虚拟主机和Internet(外网)的访问 1.设置Vbox全局网络 单击主界 ...