C#下Excel的普通处理和报表设计
一、准备:想要操作Excel,先要在添加2个COM引用:
1、Microsoft Excel 14.0 Object Library (版本不同14.0也可能是12.0等)
2、Microsoft Office 14.0 Object Library
二、操作:
在Winform中,也须添加引用
using Microsoft.Office.Interop.Excel;
相应的,本类中原有的Datatable应改为System.Data.DataTable,否则将与Excel.Datatable冲突。
public partial class FrmExcelOp : Form
{
private Microsoft.Office.Interop.Excel.Application excel; //定义一个变量供全局使用
object missing = System.Reflection.Missing.Value; //定义一个参数变量供全局使用
}
private void ExportIvoice()
{
#region 变量定义
Workbook wkBookTmpInvoice = null;
Workbook wkBookTag = null;
#endregion try
{
#region Excel准备阶段
if (!Directory.Exists(tagTempFolder))
{
Directory.CreateDirectory(tagTempFolder);
}
if (!Directory.Exists(tagFolder))
{
Directory.CreateDirectory(tagFolder);
} if (excel2 == null)
{
//创建实例
excel2 = new Microsoft.Office.Interop.Excel.Application
{
UserControl = true
};
} if (excel2 == null)
{
MyMsg.Stop("无法打开EXCEL,请检查系统配置.");
return;
} //...其它操作
wkBookTmp = excel2.Application.Workbooks.Open(tmpFileFullName, missing, true, missing, missing, missing, missing, missing, missing, true, missing, missing, missing, missing, missing);
//可写/可编辑打开一个工作薄;
if (wkBookTmpInvoice == null)
{
MyMsg.Exclamation("开启文件失败,请检查!");
return;
}
for (int i = ; i <= wkBookTmp .Sheets.Count; i++)
{
Worksheet tmpSht = wkBookTmp .Sheets[i];
//添加上边线
tmpSht.Range["A13", "L13"].Borders.Item[XlBordersIndex.xlEdgeTop].LineStyle = XlLineStyle.xlContinuous;
//去除部分信息(给单元格赋值)
if (i < wkBookTmp .Sheets.Count) tmpSht.Range["A23", "A26"].Value2 = string.Empty;
}
//新建一个工作簿,后面可以保存为文件
wkBookTag = excel2.Workbooks.Add();
if (wkBookTag != null)
{
string tInvSheetName = "INV01";
//给工作簿中的表重命名
((Worksheet)wkBookTmp .Sheets[]).Name = tInvSheetName;
//将工作簿的表1拷贝一份插入到另一个工作簿的表1的前面
((Worksheet)wkBookTmp .Sheets[]).Copy(wkBookTag.Sheets[]); Worksheet tagSheet = wkBookTag.Sheets[tInvSheetName];
tagSheet.PageSetup.Zoom = false;
tagSheet.PageSetup.FitToPagesTall = false; //所有列调整为一页,与Excel的缩放设置对应,避免拆成2页打印
tagSheet.PageSetup.CenterHorizontally = true;//水平居中
tagSheet.PageSetup.PrintTitleRows = "$1:$12";//每页都打印的报表抬头
tagSheet.VPageBreaks.Add(tagSheet.Range["M1"]); //调整纵向分页符到最后一列 for (int r = ; r < ; r++)
{
tagSheet.Rows[r].RowHeight = ; //调整明细数据行高度
}
//部分复制其它数据表
for (int i = ; i <= wkBookTmp .Sheets.Count; i++)
{
int topPos = + * (i - );
int rightPos = + * (i - );
tagSheet.Range["A" + topPos].PageBreak = ;//在某行上方插入横向分页符 //删除默认的工作表
wkBookTag.Sheets["Sheet1"].Delete();
wkBookTag.Sheets["Sheet2"].Delete();
wkBookTag.Sheets["Sheet3"].Delete();
}
#endregion //............ //以16行为复制行,在后面批量插入15行(相当于在Excel中复制16行,再选中17后面的15行,再右键-》插入复制的行)
tagSheetPL.Rows["17:32"].Insert(XlDirection.xlDown, tagSheetPL.Rows[""].Copy()); //...... #region 结尾清理及更新操作日志
//保存并关闭完成所有操作的目标文件(xlOpenXMLWorkbook为.xlsx后缀,如果要.xls后缀,需要设置为xlOpenNormal
wkBookTag.SaveAs(tagFileFullName, XlFileFormat.xlOpenXMLWorkbook);
wkBookTag.Close(false);
wkBookTag = null;
//以下放在保存之后再关闭
wkBookTmpInvoice.Close(false);//不保存关闭
wkBookTmpInvoice = null;
File.Delete(tmpInvoiceFullName);//删除临时文件
}
catch (Exception ex)
{
if (wkBookTag != null) wkBookTag.Close();
if (wkBookTmpInvoice != null)
{
wkBookTmpInvoice.Close(false);//不保存关闭
File.Delete(tmpInvoiceFullName);//删除临时文件
}
}
finally
{ }
}
//插入字符,指定字体
if (!string.IsNullOrEmpty(MXRmk))
{
var objTextBox = wkSheet.Shapes.AddTextbox(Microsoft.Office.Core.MsoTextOrientation.msoTextOrientationHorizontal,uleft,utop, , );
objTextBox.Name = "TextBox1"; //这行必须的。它直接影响下一行。
//objTextBox.Fill.Visible = 0;
objTextBox.Line.Weight = ;
objTextBox.Line.ForeColor.RGB = Color.Black.ToArgb();
objTextBox.TextFrame2.TextRange.Characters.Text="【"+ MXRmk +"】";
objTextBox.TextFrame2.TextRange.Characters.Font.Size = ;
objTextBox.TextFrame2.TextRange.Characters.Font.Bold = Microsoft.Office.Core.MsoTriState.msoCTrue;
}
插入字符
//指定位置为A2处
float aleft = (float)partnoBarRange.Left+;
float atop = (float)partnoBarRange.Top;
float aheight = (float)partnoBarRange.Height; wkSheet.Shapes.AddPicture(tmpFN, Microsoft.Office.Core.MsoTriState.msoFalse, Microsoft.Office.Core.MsoTriState.msoTrue, aleft, atop, , aheight-);
插入二维码图片
if (chkPreviewFirst.Checked)
{
excelPrint.Visible = true;
wkSheet.PrintPreview(false);
}
else
{
excelPrint.Visible = false;
wkSheet.PrintOutEx();
}
打印预览与直接打印
。。。
C#下Excel的普通处理和报表设计的更多相关文章
- 微软BI 之SSRS 系列 - 实现 Excel 中图表结合的报表设计
来自群里面讨论的一个问题,EXCEL 中有类似于这样的图形,上面是 Chart, Chart X轴上的值正好就是下方 Table 的列头,这个在 SSRS 中应该如何实现? SSRS 2008.2 ...
- VSTO 学习笔记(六)在 Excel 2010中使用RDLC报表
原文:VSTO 学习笔记(六)在 Excel 2010中使用RDLC报表 Excel具有强大的图表显示.分析功能,这点毋庸置疑,但是如果将常规MIS系统中的数据以报表的形式在Excel中显示,却并不那 ...
- 加快FineReport报表设计的几个心得体会
加快FineReport报表设计的几个心得体会 一.从远程服务器大批量取数进行表样设计时,最好按“列顺序”取一个“空的SQL语句”,这样可提高设计速度.否则每次设计时模板均要从远程读取数据,速度相当慢 ...
- ActiveReports报表控件 V13 正式发布,提供在线报表设计和自适应报表布局
重磅消息, ActiveReports V13 正式发布!本次更新 ActiveReports 将给您带来全新的报表设计体验:提供在线报表设计器.提供响应式布局和屏幕尺寸自适应能力.提供全新的图表…… ...
- FastReport报表设计(仔细看)
FastReport报表设计 2011-06-16 16:56:19| 分类: 系统开发|举报|字号 订阅 下载LOFTER我的照片书 | 目录 5.1 前言 5.2 基本概念及操 ...
- FastReport报表设计
[转载]FastReport报表设计 (2012-10-24 20:37:26) 转载▼ 标签: 转载 原文地址:FastReport报表设计作者:小黑 FastReport报表设计 目录 5.1 ...
- PowerBI开发 第十一篇:报表设计技巧(更新)
PowerBI版本在持续的更新,这使得报表设计能够实现更多新的功能,您可以访问 PowerBI Blog查看PowerBI的最新更新信息,本文总结了PowerBI新版本的重要更新和设计技巧. 我的Po ...
- 再谈Cognos报表设计中的维度函数
在报表设计的过程中,客户很多时候会想看同比.环比的数据,很多人会想到利用日期函数在数据库中处理好然后直接在报表拖出来使用,其实这样加大了数据库的压力,当然也是解决问题的一种思路.今天我们就来说一下如何 ...
- JasperReport编译报表设计5
我们在前面的章节中产生的JasperReport模板(JRXML文件).这个文件不能直接用于生成报告.它必须被编译成JasperReport的“本地二进制"格式,称为Jasperfile.在 ...
随机推荐
- Linux quota命令参数及用法详解---Linux磁盘配额限制设置和查看命令
功能说明:显示磁盘已使用的空间与限制. 语 法:quota [-quvV][用户名称...] 或 quota [-gqvV][群组名称...] 补充说明:执行quota指令,可查询磁盘空间的限制,并得 ...
- python签名设计
将一个签名网站http://www.uustv.com/的内容爬下来显示出来 代码:sign.py from tkinter import * from tkinter import messageb ...
- delphi 在桌面屏幕上模拟鼠标单击
delphi 在桌面屏幕上模拟鼠标单击 procedure TFrmUnicom.Button1Click(Sender: TObject); var oldPoint, newPoint: TPoi ...
- 最小的VIM操作指南
最小VIM操作指南 vim的操作命令非常多,为了能开始工作,必须学会一个最小的vim操作集合,这里做个总结. 1.插入.追加.插入新行 i:在当前光标所在字符的前面插入,当前字符及其后面的字符后撤 a ...
- 如何POST一个JSON格式的数据给java接口,获得返回数据
/** * 模拟post进行url请求 * @param string $url * @param json $post_data */ public function request_post($u ...
- xml和configparser模块
一.xml模块 xml是实现不同语言或程序之间进行数据交换的协议,跟json差不多,但json使用起来更简单, 但至今很多传统公司如金融行业的很多系统的接口还主要是xml. xml的格式如下,就是通过 ...
- 什么是HUD
[什么是HUD] 游戏HUD的意思: 说直白点就是在屏幕上显示你的游戏相关信息,让玩家可以随时了解那些最重要最直接相关的内容.就是说,像我们玩游戏的时候,显示您的武器耐久度不够了,您的血量不足了等等. ...
- codeforeces:Mister B and Astronomers分析和实现
题目很长,稍微翻译一下: 外星球每隔T秒中只有一秒可以被观测到,其它T-1秒无法被观测.n个天文学家(分别编号为1,...,n)轮流观测天空1秒,且第i+1个科学家在第i个天文学家后ai+1秒后才执行 ...
- CMakefile for Cross-Platform Compling - 1
cmake可以自动侦测目标系统,通常编译时候包含的文件和链接的库都不是本地的文件. Demo #toolchain cmake file SET(CMAKE_SYSTEM_NAME Linux) SE ...
- Solidity mapping循环
https://medium.com/@blockchain101/looping-in-solidity-32c621e05c22