VSTO(C#)Excel开发4:打印设置
初级代码游戏的专栏介绍与文章目录-CSDN博客
我的github:codetoys,所有代码都将会位于ctfc库中。已经放入库中我会指出在库中的位置。
这些代码大部分以Linux为目标但部分代码是纯C++的,可以在任何平台上使用。
源码指引:github源码指引_初级代码游戏的博客-CSDN博客
前一篇:VSTO(C#)Excel开发3:Range对象 处理列宽和行高-CSDN博客
前一篇我们已经知道了如何设置列宽和行高,那么如何将控制打印呢?
目录
一、打印设置 页面设置 PageSetup
1.1 打印区域PageSetup.PrintArea
1.2 纸张大小PageSetup.PaperSize
1.3 纸张方向PageSetup.Orientation
1.4 页边距 PageSetup.TopMargin等
1.5 页数 PageSetup.Pages.Count
1.6 缩放 PageSetup.Zoom
1.7 缩放到一页 PageSetup.FitToPagesWide
1.8 打印预览Worksheet.PrintPreview()
二、示例代码
三、困惑 如何知道打印区域的大小呢 标准字符宽度又是多少呢
一、打印设置 页面设置 PageSetup
与打印和页面有关的设置在Worksheet对象的PageSetup属性里,PageSetup里包含了常用的纸张大小、横向纵向、页边距等设置。
1.1 打印区域PageSetup.PrintArea
是一个Range,没有设置的话默认打印所有表格。
1.2 纸张大小PageSetup.PaperSize
这是预定义的值,枚举值xlPaperSize,很容易查到文档:
1.3 纸张方向PageSetup.Orientation
也是个枚举:
1.4 页边距 PageSetup.TopMargin等
四个边距,Top是上边距……
单位是磅。各种单位混用真是很晕啊。
1.5 页数 PageSetup.Pages.Count
这是一共有多少页。Pages是Page的集合,但Page没什么属性和方法。我以为会有这一页上打印哪些单元格呢,但是并没有。
1.6 缩放 PageSetup.Zoom
1.7 缩放到一页 PageSetup.FitToPagesWide
缩放和缩放到一页是冲突的功能啊,要先设置缩放为false缩放到一页才能生效。
1.8 打印预览Worksheet.PrintPreview()
调出打印预览可以用Worksheet.PrintPreview()。
二、示例代码
还是之前的按钮二,改了代码,新建一个按钮也行,没所谓的。
private void button2_Click(object sender, RibbonControlEventArgs e)
{
string str = "开始操作。。。。。。\n";
try
{
Worksheet worksheet = Globals.ThisAddIn.Application.ActiveSheet;
Range usedRange = worksheet.UsedRange;
str += " UsedRange:" + usedRange.Address + "\n";
str += " UsedRange.Column:" + usedRange.Column + "\n";
str += " UsedRange.Columns.Count:" + usedRange.Columns.Count + "\n";
str += " UsedRange.Row:" + usedRange.Row + "\n";
str += " UsedRange.Rows.Count:" + usedRange.Rows.Count + "\n";
str += " PrintArea:" + worksheet.PageSetup.PrintArea + "\n";
str += " PaperSize:" + worksheet.PageSetup.PaperSize.ToString() + "\n";
str += " ChartSize:" + worksheet.PageSetup.ChartSize + "\n";
str += " Orientation:" + worksheet.PageSetup.Orientation.ToString() + "\n";
str += " TopMargin:" + worksheet.PageSetup.TopMargin + "\n";
str += " BottomMargin:" + worksheet.PageSetup.BottomMargin + "\n";
str += " LeftMargin:" + worksheet.PageSetup.LeftMargin + "\n";
str += " RightMargin:" + worksheet.PageSetup.RightMargin + "\n";
str += " Pages:" + worksheet.PageSetup.Pages.Count + "\n";
//worksheet.PageSetup.Zoom = false;//设置为false才能Fit
//worksheet.PageSetup.FitToPagesWide = 1;
double originalTotalWidth = 0;
double originalTotalHeigh = 0;
for (int i = 0; i < usedRange.Columns.Count; ++i)
{
Range colum = worksheet.Columns[usedRange.Column + i];
originalTotalWidth+=colum.ColumnWidth;
}
for (int i = 0; i < usedRange.Rows.Count; ++i)
{
Range row = worksheet.Rows[usedRange.Row + i];
originalTotalHeigh+=row.RowHeight;
}
str += " originalTotalWidth:" + originalTotalWidth + "\n";
str += " originalTotalHeigh:" + originalTotalHeigh + "\n";
str += "操作成功完成\n";
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
}
MessageBox.Show(str);
}
就把上面讲的属性显示了一下,最后一段计算了总的宽度和高度。
可以先按一下button1,再按一下button2,输出:
对照代码一看就明白了。(高度少打一个字母t啊,不好意思)
三、困惑 如何知道打印区域的大小呢 标准字符宽度又是多少呢
纸张尺寸是标准的,可以查,单位是厘米,页边距是磅,列宽是标准字符宽度,行高是像素,这也太随意了。
标准字符宽度又是个和字体相关的值,没有简单的方法获取。
好吧,就这样,毕竟我的目标只是打印到一页,即使没有这些值也有办法。
下一篇VSTO(C#)Excel开发5:调整表格到一页-CSDN博客
(这里是文档结束)