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. 一.读取单 ...
随机推荐
- JUnit测试框架的使用
1.学习Junit框架的使用 可通过以下两个示例进行学习. A.Junit使用方法示例1 1)把Junit引入当前项目库中 新建一个 Java 工程—coolJUnit,打开项目coolJUnit 的 ...
- Java网络编程三--基于TCP协议的网络编程
ServerSocket对象用于监听来自客户端的Socket连接,如果没有连接,它将一直处于等待状体 Socket accept():如果接收到客户端的连接请求,该方法返回一个与客户端对应Socket ...
- Linux 启动SVN服务
#使用默认端口3690启动svn服务svnserve -d -r /home/svndata # 如果出现#svnserve: Can't bind server socket: Address al ...
- 洛谷P2312 解方程(暴力)
题意 题目链接 Sol 出这种题会被婊死的吧... 首先不难想到暴力判断,然后发现连读入都是个问题. 对于\(a[i]\)取模之后再判断就行了.注意判断可能会出现误差,可以多找几个模数 #includ ...
- 软件项目技术点(2)——Canvas之获取Canvas当前坐标系矩阵
AxeSlide软件项目梳理 canvas绘图系列知识点整理 前言 在我的另一篇博文 Canvas坐标系转换 中,我们知道了所有的平移缩放旋转操作都会影响到画布坐标系.那在我们对画布进行了一系列操 ...
- 在crontab中执行脚本重要事项
crontab不能成功执行shell脚本的可能原因 crond进程不存在,该进程是crontab的守护进程,它必须存在才能让crontab正常使用: 系统时间不对: 环境变量的问题:crontab执行 ...
- 【Leetcode】【Easy】Valid Sudoku
Determine if a Sudoku is valid, according to: Sudoku Puzzles - The Rules. The Sudoku board could be ...
- 西门子 1500 1200 PLC,位访问, 字节访问
访问byte,word中的位 mybyte.%X1 myword.%X1 访问word/dword中的byte myword.%B0 myword.%B1 myDword.%B0 文中mybyte, ...
- SQL-MySQL使用教程-对MySQL的初步尝试
出现问题:中文无法显示.存储:不对任何数据做检测,只管理数据类型.
- Opportunity的chance of success的赋值逻辑
该字段的值和另外两个字段Sales Stage和Status都相关. 从下列function module CRM_OPPORT_H_PROB_SET_EC可看出,当status不为代码中的这些硬编码 ...