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)的更多相关文章

  1. c#操作Excel模板,替换命名单元格或关键字形成报表

    c#操作Excel模板,替换命名单元格或关键字形成报表 http://blog.sina.com.cn/s/blog_45eaa01a0102vqma.html一 建立Excel 模板文件 templ ...

  2. 如何用Apache POI操作Excel文件-----如何对一个单元格加注解?

    有的时候,我们需要通过操作Apache POI,在生成Cell数据的同时,能对其生成的Cell,加上注解(comments),类似于下面的. 那么对于这种情况,我们的代码应该如何写呢? 借花献佛,我就 ...

  3. 使用Aspose.Cell.dll导出Excel总结

    这两天项目上用Aspose导出Excel来着.开始感觉挺简单的,但是实际操作起来还是挺复杂的,调试占的时间很长.主要是动态生成列.合并单元格.调样式占了很长时间,还是总结一下吧. 基础操作: //EX ...

  4. java excel给单元格增加批注(包含SXSSF)

    package javatest; import java.io.FileOutputStream; import java.io.IOException; import org.apache.poi ...

  5. jxl获取excel中的合并的单元格(主要是方法介绍)

    Range[] rangeCells = sheet.getMergedCells();// 返回sheet中合并的单元格数组 for (Range r : rangeCells) {//对数组遍历拿 ...

  6. 怎样将Excel包含某字符的单元格填充颜色

    在处理数据的时候,xmyanke想将Excel中包含某字符的单元格填充蓝色,比较容易看清,弄了好一阵子都没完成,最后试用条件格式处理了一下,终于实现了. 比如要将A1到A12区间包含数字1的单元格填充 ...

  7. 根据路径获得文件名以及Aspose.Cells.dll操作excel 以及使用iTextSharp.text.pdf.PdfReader.dll对PDF的操作

    string result = Regex.Match(str,@"[^\\]+$").Value;//正则表达式 this.listBox1.Items.Add(Path.Get ...

  8. 在excel单元格中提取信息

    平时在excel中处理数据的时候,肯定会遇到在单元格提取信息的情况,比如在地址中提取省.市.地区等,如果数据源内容规整的话,可以直接使用left().right().mid()等函数直接提取,但是大多 ...

  9. POI读取单元格信息及单元格公式

    Java操作EXCEL的利器一般都是POI和JXL,鄙人只是POI的忠实粉丝.(其实我是没有用过JXL). 现在大多数的excel都是07以上的版本,所以我一般是用07的基础上使用POI. 一.读取单 ...

随机推荐

  1. C#中DataTable与泛型集合互转(支持泛型集合中对象包含枚举)

    最近在做WCF,因为是内部接口,很多地方直接用的弱类型返回(DataSet),这其实是一种非常不好的方式,最近将项目做了修改,将所有接口返回值都修改成强类型,这样可以减少很多与客户端开发人员的沟通,结 ...

  2. 4、Angular2 pipe

    1. stateless pipe 2.stateful pipe

  3. FreeSwitch无法启动,提示进程pid锁定的解决方法

    来源:https://stackoverflow.com/questions/12817232/how-do-i-call-a-local-softphone-on-freeswitch error ...

  4. Protocol Buffers教程

    今天想比较下pb和fastjson两个序列化后的大小.再看了一下pb序列化 pb官网:https://developers.google.com/protocol-buffers/ pb是啥 What ...

  5. foreach的基本语法

    有一个布尔型循环是专门用来循环数组的.这个循环的基本语法就是foreach基本语法 foreach( 要循环的数组变量 as [键变量 =>] 值变量){ //循环的内容 } 这是一个固定用法, ...

  6. Java入门到精通——框架篇之Hadoop概述

    一.Hadoop来历 Hadoop的思想来源于Google在做搜索引擎的时候出现一个很大的问题就是这么多网页我如何才能以最快的速度来搜索到,由于这个问题Google发明了倒排索引算法,通过加入了Map ...

  7. 统计学中的P值与显著性的意义

    统计学意义(p值) 结果的统计学意义是结果真实程度(能够代表总体)的一种估计方法.专业上,p值为结果可信程度的一个递减指标,p值越大,我们越不能认为样本中变量的关联是总体中各变量关联的可靠指标.p值是 ...

  8. matlab练习程序(演化策略ES)

    还是这本书上的内容,不过我看演化计算这一章是倒着看的,这里练习的算法正好和书中介绍的顺序是相反的. 演化策略是最古老的的演化算法之一,和上一篇DE算法类似,都是基于种群的随机演化产生最优解的算法. 算 ...

  9. C++异常安全的思考

    异常安全的代码是指,满足两个条件 1异常中立性 : 是指当你的代码(包括你调用的代码)引发异常时,这个异常 能保持原样传递到外层调用代码 2.异常安全性:  1,抛出异常后,资源不泄露, 2,抛出异常 ...

  10. java面试题之 -----面向切面编程

    这种在运行时,动态地将代码切入到类的指定方法.指定位置上的编程思想就是面向切面的编程. 面向切面编程(AOP是Aspect Oriented Program的首字母缩写) ,我们知道,面向对象的特点是 ...