总结前夕

我做了两个比较有意思的模块
1.微信推送
2.打印模板
代码已经能够看懂,流程也能理顺,但是对于架构层面还是不了解,打算从架构层面(或者是流程)来整理。

效果:点击 打印文件 按钮,出现打印预览,并且页面数据填入到模板中
点击按钮 触发 js事件,
js代码跳转到 新的html,
在 新的html页面 的 js代码中发送http请求到ashx(一般处理程序)

this.DownloadPrintFile = function (entityid, logicalname, userid,  successCallBack, errorCallBack) {
    debugger; 
    var url = "https://" + window.location.hostname + ":8099/DownloadPrintFile.ashx?id=" + entityid+"&logicalname="+logicalname+"&userid="+userid; 
    $.ajax({
    url: url ,
    type: 'post',
    dataType: 'json',
    async: true, 
    success: function (res) { 
        successCallBack(res);
    },
    error: function (e) {
        errorCallBack(e);
        }
    });
}

ashx(一般处理程序)文件可以引用其他dll或者调用服务,怎么写都ok
先拿到模板文件,

//将文件copy到新路径下,isrewrite表示是否覆盖已有文件
System.IO.File.Copy(path, newpath, isrewrite);

新建 workbook,对workbook操作,
将页面中的数据从数据库中以XML格式取出,(使用存储过程更方便)涉及到sql 的 FOR XML PATH('node'), ROOT('root'),TYPE,详细内容可以参考SQL Server XML基础学习<1>之–FOR XML PATH
结合代码可以看得出数据替换的逻辑
数据替换,(属性名与XML节点名相同时替换)详细见代码逻辑,
再回写到excel文件

HSSFWorkbook wk = null;
using (FileStream fs = File.Open(templatefilePath,FileMode.Open,FileAccess.Read))
{
    //把xls文件读入workbook变量里,之后就可以关闭了
    wk = new HSSFWorkbook(fs);
    //fs.Close(); 没有必要写,using会自动关闭
}
wk.SetSheetName(0, sheetname);
ISheet sheet = wk.GetSheet(sheetname);
//取出相应cell中的数据
var cell = sheet.GetRow(rowIndex).GetCell(columnIndex);

if (cellvalue.Contains("[#HeadNode.") && cellvalue.Contains("#]"))
{
    var elementName = cellvalue.Replace("[#HeadNode.", "").Replace("#]", "");
    //表头元素
    var element = headNode.SelectSingleNode(elementName) as XmlElement;
    if (element != null)
    {
        cell.SetCellValue(element.InnerText);
    }
}
//workbook回写excel文件
using (FileStream fileStream = File.Open(templatefilePath, FileMode.OpenOrCreate, FileAccess.ReadWrite))
{
    wk.Write(fileStream);
}

将excel中行向下移动,具体参见API

sheet.shiftRows(startRow + 1, sheet.getLastRowNum(), rows,true,false);
newRow.Height = sourceRow.Height;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值