c# 前端无插件打印导出实现方式
打印
- 打印导出分布页
@model List<界面的数据模型类>
@using WingSoft;
@using Newtonsoft.Json;
<style type="text/css">.modal-content {width: 800px;}.modal-body {height: 400px;}
</style>
<script type="text/javascript">$(function () {if (@ViewBag.pe== 0) {//打印let content = ''for (var i = 0; i < $(".boxDiv").length; i++) {content += $(".boxDiv").eq(i).html() + '<div style="page-break-after: always;"></div>'}printFunc(content);} else {//导出(将所有数据导出到一个excel,多个工作表的形式)let contentArray = [];for (var i = 0; i < $(".boxDiv").length; i++) {contentArray.push({html: $(".boxDiv").eq(i).html(),name: "xx记录表" + (i + 1)});}exportToExcelBatch('xx记录表',contentArray)}});</script><div class="modal fade" id="modal" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true"><div class="modal-dialog"><div class="modal-content"><div class="modal-header"><button type="button" class="close" data-dismiss="modal" aria-hidden="true"><img src="~/Images/icon_closed.png" /></button></div><div class="modal-body">@for (var i = 0; i < Model.Count; i++){<div class="boxDiv"><style>.boxDiv table {width: 100%;display: flex;flex-direction: column;align-items: center;}.printTable {width: 100%;font-family: "宋体";border: 0px;color: #333;font-size: 12px;}.printTable th {font-weight: 600;font-size: 14px;}.printTable td, .printTable th {text-align: center;padding: 3px 3px;}.content td {border: 1px solid #4a4a4a;}.tabletitle1 {font-size: 20px;font-weight: bold;}.tabletitle2 {font-size: 18px;font-weight: bold;position: relative;}.contenleft {text-align: left !important;}.contenright {text-align: right !important;}.boxcontent {height: 30px;font-size: 14px;}.footertext {font-size: 14px;}.printTable td, .printTable th {border: 1px solid #E5E5E5;padding:3px;font-size:14px;}.printTable thead th{text-align:center;}</style><div class="modal-title" style="font-size:18px;text-align:center;">@Model[i].SchoolName 经营成本</div><div style="margin:10px 0"><span>食堂名称:@Model[i].CanteenName</span><span style="margin-left:30%">登记时间:@Model[i].ForDate</span></div><table class="printTable" border=0 cellspacing=0 cellpadding=0 style="border-collapse:collapse;width:100%;"><thead><tr><th>序号</th><th>成本名称</th><th>成本金额(元)</th><th>备注</th></tr></thead><tbody style="width:100%;">@{int index = 1;}@foreach (var item in Model[i].CostItemList){<tr><td>@(index++)</td><td>@item.Name</td><td>@item.TotalMoney</td><td>@item.Remark</td></tr>}</tbody></table></div>}</div><div class="modal-footer"><button type="button" class="btn2 btn_90_28" data-dismiss="modal">关闭</button></div></div></div>
</div>
- 打印js
// 打印
function printFunc(data) {loadStart();var iframeHtml = document.createElement("iframe");iframeHtml.id = "iframePrintBox";iframeHtml.style.width = "0";iframeHtml.style.height = "0";document.body.appendChild(iframeHtml);iframeHtml.srcdoc = '<!DOCTYPE html>' + data + "<script type='text\/javascript'>window.onload = function(){window.print();window.onafterprint = ()=>{window.parent.close();}}<\/script>";loadEnd()
}
导出
//多sheet导出
function exportToExcelBatch(sheetName, exportArr) {var fileName_g, sheetsName_g, mainHtml_g, sheetHtml_g// 导出函数sheetsName_g = getSheetsName() //获取到每个sheet的名称集合fileName_g = sheetName + '.xlsx' //外部导出名称sheetHtml_g = getSheetXml() //得到每一个sheet的xml片段mainHtml_g = getMainXml() //导出的主体xml片段let XLSData = 'data:application/vnd.ms-excelbase64,' + window.btoa(window.unescape(encodeURIComponent(mainHtml_g)))// 下载download(XLSData)// 下载function download(base64data) {let blobif (window.navigator.msSaveBlob) {blob = base64ToBlob(base64data)window.navigator.msSaveBlob(blob, sheetName + '.xlsx')return false}let a = document.createElement("a")if (window.URL.createObjectURL) {blob = base64ToBlob(base64data)a.href = window.URL.createObjectURL(blob)a.download = fileName_ga.click()return}a.href = base64dataa.download = fileName_ga.click()}// 获取sheet名称function getSheetsName() {let sheetsName = []exportArr.forEach((item) => {sheetsName.push(item.name)})return sheetsName}
// 创建文件流
function base64ToBlob(base64Data) {let arr = base64Data.split(',')let mime = arr[0].match(/:(.*?)/)[1]let bstr = atob(arr[1])let n = bstr.lengthlet u8arr = new Uint8ClampedArray(n)while (n--) {u8arr[n] = bstr.charCodeAt(n)}return new Blob([u8arr], { type: mime })
}/*** 文件下载* @param {any} url 文件路径* @param {any} fileName 文件名称*/function downloadFile(url, fileName) {if (!url || !fileName) return false;let aUrl = url;const x = new XMLHttpRequest();x.open('GET', aUrl, true);x.responseType = 'blob';x.onload = function (e) {const url = window.URL.createObjectURL(x.response);const elink = document.createElement('a');elink.href = url;elink.target = '_self'; // 当前页 target打开新页面elink.download = `${fileName}`;elink.style.display = 'none';document.body.appendChild(elink);elink.click();document.body.removeChild(elink);};x.send();}// 获取所有xml代码function getMainXml() {let mainHtml = ''let sheets = ''if (sheetsName_g.length > 0) {for (let i = 0; i < sheetsName_g.length; i++) {let name = sheetsName_g[i]let sheetItem = `<x:ExcelWorksheet><x:Name>${name}</x:Name><x:WorksheetSource HRef=3D"export/sheet${name}.xml"/></x:ExcelWorksheet>`sheets += sheetItem}}mainHtml = `MIME-Version: 1.0
X-Document-Type: Workbook
Content-Type: multipart/related; boundary="----memo----"------memo----
Content-Location: file:///C:/0E8D990C/export.xml
Content-Transfer-Encoding: quoted-printable
Content-Type: text/html; charset="us-ascii"<html xmlns:o=3D"urn:schemas-microsoft-com:office:office"
xmlns:x=3D"urn:schemas-microsoft-com:office:excel"
xmlns=3D"http://www.w3.org/TR/REC-html40"><head>
<xml><o:DocumentProperties><o:Author>ijovo</o:Author><o:LastAuthor>ijovo</o:LastAuthor><o:Company>ijovo</o:Company><o:Version>1.0</o:Version></o:DocumentProperties>
</xml>
<!--[if gte mso 9]>
<xml><x:ExcelWorkbook><x:ExcelWorksheets>${sheets}</x:ExcelWorksheets></x:ExcelWorkbook>
</xml>
<![endif]-->
</head>
</html>` + sheetHtml_g + `------memo------`return mainHtml}// 获取每个sheet的xml代码}function getSheetXml() {let sheetHtml = ''let sheets = ''for (let i = 0; i < exportArr.length; i++) {let name = exportArr[i].name// MIME要求格式必须顶格……所以这里排版比较乱……let sheetItem = `------memo----
Content-Location: file:///C:/0E8D990C/export/sheet${name}.xml
Content-Transfer-Encoding: quoted-printable
Content-Type: text/html; charset="us-ascii"<html xmlns:o="urn:schemas-microsoft-com:office:office"xmlns:x="urn:schemas-microsoft-com:office:excel"xmlns="http://www.w3.org/TR/REC-html40"><head><xml><x:WorksheetOptions><x:ProtectContents>False</x:ProtectContents><x:ProtectObjects>False</x:ProtectObjects><x:ProtectScenarios>False</x:ProtectScenarios></x:WorksheetOptions></xml><style><!-- @page{mso-footer-data:"&C\\7B2C &P \\9875\\FF0C\\5171 &N \\9875";margin:0.748in 0.195in 0.748in 0.195in;mso-header-margin:0.51in;mso-footer-margin:0.51in;}--></style></head><body>`let table = `<table border=0 cellspacing=0 cellpadding=0 width="100%" bordercolor="#000000" style="border-collapse:collapse">${exportArr[i].html}</table>`sheetItem += table + `</body>
</html>`sheets += sheetItem}sheetHtml = sheetsreturn sheetHtml}
}
单表格导出
// 导出表格
function exportToExcel(sheetName, html) {var uri = 'data:application/vnd.ms-excel;base64,';var template = '<html xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:x="urn:schemas-microsoft-com:office:excel"' +'xmlns="http://www.w3.org/TR/REC-html40"><head><!--[if gte mso 9]><xml><x:ExcelWorkbook><x:ExcelWorksheets><x:ExcelWorksheet>'+ '<x:Name>{worksheet}</x:Name><x:WorksheetOptions><x:DisplayGridlines/></x:WorksheetOptions></x:ExcelWorksheet></x:ExcelWorksheets>'+ '</x:ExcelWorkbook></xml><![endif]-->' +' <style type="text/css">' +'table td {' +'border: 0.5px solid #000000;' +'width: auto;' +'height: 25px;' +'text-align: center;' +'mso-number-format:\@;' +'vnd.ms-excel.numberformat:\@;' +/* 'background-color: #4f891e;' +*//* 'color: #ffffff;' +*/' }' +'table th {' +'border: 0.5px solid #000000;' +/* 'width: auto;' +*/'height: 35px;' +'text-align: center;' +'font-size:20px' +'mso-number-format:\@;' +'vnd.ms-excel.numberformat:\@;' +' }' +'</style>' +'</head><body ><table>{table}</table></body></html>';//if (!tableid.nodeType) tableid = document.getElementById(tableid);//var ctx = { worksheet: sheetName || 'Worksheet', table: tableid.innerHTML };var ctx = { worksheet: sheetName || 'Worksheet', table: html };var a = document.createElement("a");a.download = sheetName + ".xls";a.href = uri + this.excelBase64(this.excelFormat(template, ctx));document.body.appendChild(a);a.click();document.body.removeChild(a);
}// Excel格式
function excelFormat(s, c) {return s.replace(/{(\w+)}/g,function (m, p) {return c[p];});
}// 纯js导出Excel
function excelBase64(excelFile) {return window.btoa(unescape(encodeURIComponent(excelFile)));
}
相关文章:

c# 前端无插件打印导出实现方式
打印 打印导出分布页 model List<界面的数据模型类> using WingSoft; using Newtonsoft.Json; <style type"text/css">.modal-content {width: 800px;}.modal-body {height: 400px;} </style> <script type"text/javascript">$(…...

数组的初始化,参数传递,和求和
在自己做的这个C语言解释器中,数组的使用非常简便。下面小程序是一个例子。演示了数组的初始化,参数传递, 和求和。 all[] { WA12,OR8,CA54, ID4, MT4, WY3, NV6, UT6, AZ11, CO10, NM5, ND3,SD3,NE4, KS6, OK7,TX40, MN10, WI10,IA6, MO10,…...

初始JavaEE篇——多线程(1):Thread类的介绍与使用
找往期文章包括但不限于本期文章中不懂的知识点: 个人主页:我要学编程(ಥ_ಥ)-CSDN博客 所属专栏:JavaEE 目录 创建线程 1、继承 Thread类 2、实现Runnable接口 3、使用匿名内部类 1)继承Thread类的匿名内部类 2)…...

基于单片机的LED照明自动控制系统的设计
本设计主控核心芯片选用了AT89C51单片机,接入了光照采集模块、红外感应模块、继电器控制模块,通过控制发光二极管模拟教室智能灯组的控制。首先通过光敏感应的方式感应当前光照环境为白天还是夜晚,同时,红外感应模块感应是否有人。…...

C语言——头文件的使用
目录 前言头文件怎么包含 前言 这个专栏会专门讲一些C语言的知识,后续会慢慢更新,欢迎关注 C语言专栏 头文件怎么包含 在使用头文件的过程中,我们经常会遇到重定义、重复包含等问题,那么怎么编写头文件和使用头文件才能解决这些…...

LeetCode 精选 75 回顾
目录 一、数组 / 字符串 1.交替合并字符串 (简单) 2.字符串的最大公因子 (简单) 3.拥有最多糖果的孩子(简单) 4.种花问题(简单) 5.反转字符串中的元音字母(简单&a…...

【Unity - 屏幕截图】技术要点
在Unity中想要实现全屏截图或者截取某个对象区域的图片都是可以通过下面的函数进行截取 Texture2D/// <summary>/// <para>Reads the pixels from the current render target (the screen, or a RenderTexture), and writes them to the texture.</para>/…...

句句深刻,字字经典,创客匠人老蒋金句出炉,哪一句让你醍醐灌顶?
注意力经济时代、流量经济时代、短视频经济时代,创始人到底应该如何做,才能抓住风口,链接未来? 「创始人IP创新增长班」线下大课现场,老蒋作为主讲导师,再一次用他丰富的行业经验与深刻的时代洞察ÿ…...

柯尼卡美能达CA-310 FPD色彩分析仪
柯尼卡美能达CA-310 FPD色彩分析仪 型 号:CA-310 名 称:FPD色彩分析仪 品 牌:柯尼卡美能达(KONICA MINOLTA) 分 类:光学和色彩测试 > 光学、显示与色彩测量 > 色彩分析仪 产品属性:主机 简 述&…...

二维EKF的MATLAB代码
EKF二维滤波 MATLAB 实现 提升您的数据处理能力!本MATLAB程序实现了扩展卡尔曼滤波(EKF)在二维状态估计中的应用,专为需要高精度定位和动态系统分析的用户设计。通过精确的滤波技术,有效减少噪声影响,确保…...

大数据治理:数据时代的挑战与应对
目录 大数据治理:数据时代的挑战与应对 一、大数据治理的概念与内涵 二、大数据治理的重要性 1. 提高数据质量与可用性 2. 确保数据安全与合规 3. 支持数据驱动的决策 4. 提高业务效率与竞争力 三、大数据治理的实施策略 1. 建立健全的数据治理框架 2. 数…...

绿联NAS免驱安装MacOS
前段时间UGOS Pro迎来了一次大更新,Docker新增了Docker Compose堆栈项目,于是便在Docker Hub找了个支持Docker Compose部署的MacOS开源项目来验证一下,顺便体验一下用N100运行是什么感觉。 开始折腾 先说说,在没用Docker Compos…...

聊聊ASSERT处理在某些场景下的合理用法
先看看ASSERT的介绍: 编写代码时,我们总是会做出一些假设,ASSERT断言就是用于在代码中捕捉这些假设,可以将断言看作是异常处理的一种高级形式。断言表示为一些布尔表达式,程序员相信在程序中的某个特定点该表达式值为真…...

SAP Odata 服务
参考过程 SAP创建ODATA服务-Structure_sap odata-CSDN博客 案例...

【java数据结构】栈
【java数据结构】栈 一、栈的概念二、 栈的使用三、 栈的模拟实现(数组)构造方法size()empty()push()pop()peek() 四、 栈的模拟实现(链表)构造方法size()empty()push()pop()peek() 五、 栈的例题 此篇博客希望对你有所帮助(帮助你了解栈),不…...

从头开始的可视化数据 matplotlib:初学者努力绘制数据图
从头开始学习使用 matplotlib 可视化数据,对于初学者来说,可能会有些挑战,但 matplotlib 的核心理念非常清晰:绘制图表需要了解如何设置图形、坐标轴以及如何用数据填充它们。我们可以通过一些简单的例子来逐步介绍基本步骤。 1. …...

vscode 远程linux服务器 连接git
vscode 远程linux服务器 连接git 1. git 下载2. git 配置1)github 设置2)与github建立连接linux端:创建密钥github端:创建ssh key 3. 使用1)初始化repository2)commit 输入本次提交信息,提交到本…...

不同jdk版本中的接口规范
Java Development Kit(JDK)的每个版本通常会对 Java 语言和类库进行改进,接口规范也在不断演进。Java 接口的演变是逐步从 “纯粹抽象的定义” 向 “具有行为的抽象定义” 演化的。 JDK 1.0 和 JDK 1.1JDK 1.2 到 JDK 1.6JDK 1.8(…...

人工智能图像信号处理器(AI ISP)技术介绍
随着智能设备和数码成像技术的快速发展,图像质量的提升成为用户体验的关键因素之一。人工智能图像信号处理器(AI Image Signal Processor,AI ISP) 作为传统图像信号处理器(ISP)的升级版,通过集成…...

3D Slicer 教程三 ---- 坐标系
上篇提到3D Slicer 教程二 ---- 数据集-CSDN博客 3d slicer的坐标系与大多数医学影像软件使用LPS(左、后、上)坐标系统不太一样, 今天就仔细介绍一下坐标系的区别,复盘一下在影像处理中遇到的坐标问题(集中在坐标处理相关的,图像插值,图像处理, 定位线,翻…...

Video-LLaMA论文解读和项目部署教程
Video-LLaMA: An Instruction-tuned Audio-Visual Language Model for Video Understanding 相关工作 大型语言模型: 本文的工作基于这些LLM,并提供即插即用插件,使其能够理解视频中的视觉和听觉内容。 多模态大型语言模型: 现有…...

Elasticsearch设置 X-Pack认证,设置账号和密码
前言 以下Elasticsearch版本:7.9.3 ES自带的X-Pack密码验证: X-Pack是elasticsearch的一个扩展包,将安全,警告,监视,图形和报告功能捆绑在一个易于安装的软件包中,所以我们想要开启账号密码验证…...

机器学习——量子机器学习(Quantum Machine Learning)
机器学习——量子机器学习(Quantum Machine Learning) 量子机器学习(Quantum Machine Learning)——未来的智能计算量子机器学习的核心概念使用Qiskit进行量子机器学习——代码示例代码解析量子机器学习的应用结论 量子机器学习&a…...

Android Studio 的 Gradle 任务列表只显示测试任务
问题现象如下: 问题原因: 这是因为Android Studio 设置中勾选了屏蔽其他gradle任务的选项。 解决方法: File -> Settings -> Experimental 取消勾选Only include test tasks in the Gradle task list generated during Gradle Sync&…...

Keepalived:高可用性的守护神
Keepalived:高可用性的守护神 在现代企业IT系统中,高可用性是确保业务连续性和服务质量的关键要素。系统面对硬件故障、软件错误、人为失误或自然灾害时,依然能保持正常运行,这样的能力对于企业来说至关重要。为此,业界开发了一系列高可用性解决方案,其中Keepalived以其…...

Golang笔记_day08
Go面试题(一) 1、空切片 和 nil 切片 区别 空切片: 空切片是指长度和容量都为0的切片。它不包含任何元素,但仍然具有切片的容量属性。在Go语言中,可以使用内置的make函数创建一个空切片,例如:…...

如何在 React 中更新状态对象的某个值
在 React 中,我们经常需要更新组件的状态来反映 UI 的变化。如果状态是一个复杂的对象,比如一个包含多个筛选条件的对象,我们希望只更新其中的某个键,而不是整个状态对象。今天,我将向大家展示如何在更新状态时保留已有…...

edge浏览器:你的连接不是专用连接
最近在使用edge浏览器打开github时,发现打不开了,提升你的连接不是专用连接。试了很多种方法甚至重装了浏览器,都没有用。 直到看到了这篇文章,才得到解决: 10 个修复此站点在 Windows Edge 上的连接不安全的问题htt…...

PDF 软件如何帮助您编辑、转换和保护文件
如何找到最好的 PDF 编辑器。 无论您是在为您的企业寻找更高效的 PDF 解决方案,还是尝试组织和编辑主文档,PDF 编辑器都可以在一个地方提供您需要的所有工具。市面上有很多 PDF 编辑器 — 在决定哪个最适合您时,请考虑这些因素。 1. 确定您的…...

如何使用Java爬虫处理API接口返回的JSON数据?
处理API接口返回的JSON数据是Java爬虫开发中的一个常见任务。在Java中,有多个库可以帮助我们解析JSON数据,其中最流行的是Jackson和Gson。以下是使用这两个库处理JSON数据的基本步骤和示例代码。 使用Jackson处理JSON Jackson是一个功能强大的JSON处理…...