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. 一.读取单 ...
随机推荐
- [转]ASP.NET Core / MVC 6 HttpContext.Current
本文转自:http://www.spaprogrammer.com/2015/07/mvc-6-httpcontextcurrent.html As you know with MVC 6, Http ...
- 删除table表格行
function getRowObj(obj) { while(obj.tagName.toLowerCase()!="tr") // toLowerCase转化小写 { ...
- java 获取网络地址图片
收藏一个获取网络图片的方法. //获取网络图片 public void ImageRequest(String ImageName,String GifUrl) throws Exception { ...
- Session&Cookie 简介及使用
Cookie cookie 是存储于访问者的计算机中的变量.每当同一台计算机通过浏览器请求某个页面时,就会发送这个 cookie.你可以使用 JavaScript 或其它语言来创建和取回 cookie ...
- 数据库中char、varchar、varchar2、nvarchar之间的关系
符串“abc",对于CHAR (20),表示你存储的字符将占20个字节(包括17个空字符),而同样的VARCHAR2 (20)则只占用3个字节的长度,20只是最大值,当你存储的字符小于20时 ...
- vue——指令系统
指令系统,可以联想咱们的cmd命令行工具,只要我输入一条正确的指令,系统就开始干活了. 在vue中,指令系统,设置一些命令之后,来操作我们的数据属性,并展示到我们的DOM上. 在vue中提供了一套为数 ...
- ajax异步请求/同源策略/跨域传值
基本概念 Ajax 全称是异步的 JavaScript 和 XML . 通过在后台与服务器进行少量数据交换,AJAX 可以使网页实现异步更新.这意味着可以在不重新加载整个网页的情况下,对网页的某部分进 ...
- cocoapods的安装和安装过程中遇到的问题
查看当前的ruby版本,我的版本是ruby 2.0.0p648 小于2.2安装cocoapods时会遇到以下问题 $ ruby -v 查看当前ruby源,默认为 https://rubygems.or ...
- flex布局帮助你快速实现布局
flex布局可以帮我们快速布局一些区块,实现你想要的效果,不用再去float,position之类的.我们在布局网页的时候很多时候都是一些特殊布局,flex就能帮我快速去布局,不需要去定位. 任何一个 ...
- 编写可维护的 Gruntfile.js
load-grunt-tasks 插件 首先介绍下 load-grunt-tasks 这个插件. 我们一般都会把所有用到的插件以及插件的配置写到 Gruntfile.js 里面,对于小项目来说这个文件 ...