设置固定打印范围代码如下:
//以固定行列值设置打印范围
pt.RowStart = 1;
pt.RowEnd = 3;
pt.ColStart = 1;
pt.ColEnd = 3;
pt.PrintType = FarPoint.Win.Spread.PrintType.CellRange;
我们有上百个xls,不可能一个一个设,每个都可能不一样,可以自动设吗?那个文字消失的截图您看到了吗。您发给我的test.rar里也一样消失了,我再上传一下,您仔细看看
回复 9楼hptj的帖子
确实存在这样的问题,我查看了原因,Excel 中显示不全文字的垂直对齐方式为居中对齐,可以通过以下带修改:
this.fpSpread1.ActiveSheet.Rows.VerticalAlignment = CellVerticalAlignment.Top;
我会把这个问题上报给产品组,收到反馈后回复。 设置打印区域只能一个sheet一个sheet的设置行和列吗,有没有PrintArea之类的属性可以一下获取整个Sheet的打印区域?(对于上百个xls,每个的打印区域都可能不一样,一个一个设置太麻烦) 回复 14楼hptj的帖子
hptj 你好,
“GetLastNonEmptyColumn行吗,我们有的列有内容,但XLS中设置为打印区域之外 ”
我理解这句话的意思是:
表单中有肯能有 10 列,但是只想打印前 9 列。是否正确呢?
这种情况需要通过 11# 代码实现。
或者,你的意思是打印不固定行列数的表单?那么可以通过获取获取最后非空行列值来实现。
//设置打印范围
pt.RowEnd = this.fpSpread1.Sheets.GetLastNonEmptyRow(FarPoint.Win.Spread.NonEmptyItemFlag.Data);
pt.ColEnd = this.fpSpread1.Sheets.GetLastNonEmptyColumn(FarPoint.Win.Spread.NonEmptyItemFlag.Data);
“表单中有肯能有 10 列,但是只想打印前 9 列。”就是这个意思,但我们有上百个xls上千个sheet,11#的代码岂非要一个一个设?这太麻烦了吧,Excel本身有一个打印区域设置,FarPoint可不可以获取这个打印区域,这样就不用手动设置每个打印sheet的行数和列数了 回复 16楼hptj的帖子
你好,
经调查 Spread 可以拿到 Excel 中的 “打印区域设置”信息,获取代码如下:
private void Form1_Load(object sender, EventArgs e)
{
this.fpSpread1.OpenExcel("原始文件.xls");
PrintInfo pt = this.fpSpread1.Sheets.PrintInfo;
pt.Orientation = PrintOrientation.Landscape;
pt.PrintToPdf = true;
pt.PdfFileName = "test.pdf";
pt.ZoomFactor = 0.75f;
pt.ShowColor = true;
pt.UseSmartPrint = true;
this.fpSpread1.Sheets.PrintInfo = pt;
this.fpSpread1.AllowCellOverflow = true;
this.fpSpread1.Sheets.Rows.VerticalAlignment = CellVerticalAlignment.Top;
this.fpSpread1.PrintSheet(1);
}
回复 17楼iceman的帖子
您好,目前总结就是两个问题:
1、如果FarPoint不能自动缩放sheet中的内容来适应PDF大小,那么可以改变PDF页面大小来适应不同的sheet大小吗?
2、近千个sheet,没办法一个一个找到那些生成PDF可能文字消失的单元格,控件可以自动解决这种排版问题吗(毕竟原始文件中这些文字是可以显示完全的)?(目前的方式是: this.fpSpread1.Sheets.Rows.VerticalAlignment = CellVerticalAlignment.Top;) 回复 18楼hptj的帖子
第一个问题,可以先获取默认打印纸张大小。再计算所有打印列的宽度,计算缩放程度:
this.fpSpread1.OpenExcel("原始文件.xls");
SheetView sv = this.fpSpread1.Sheets;
PrintInfo pt = this.fpSpread1.Sheets.PrintInfo;
pt.Orientation = PrintOrientation.Landscape;
pt.PrintToPdf = true;
pt.PdfFileName = "test.pdf";
//获取 Spread 中的实际打印宽度
int startCol = pt.ColStart;
int colEnd = pt.ColEnd;
float printWidth = 0;
for (int i = startCol; i <= colEnd; i++)
{
printWidth += sv.Columns.Width;
}
//获取默认纸张打印宽度
PrintDocument pd = new PrintDocument();
float actualPageWidth = pd.DefaultPageSettings.PaperSize.Width;
pt.ZoomFactor = (printWidth > actualPageWidth) ? actualPageWidth / printWidth : 1f;
pt.ShowColor = true;
2.这个问题我已经提交给产品组,在得到回复后我会反馈给你。由于时差和处理顺序问题,需要几天时间,请稍候。 回复 18楼hptj的帖子
hptj 你好,
“2、近千个sheet,没办法一个一个找到那些生成PDF可能文字消失的单元格,控件可以自动解决这种排版问题吗(毕竟原始文件中这些文字是可以显示完全的)?(目前的方式是: this.fpSpread1.Sheets.Rows.VerticalAlignment = CellVerticalAlignment.Top;)”
这个问题已经确认为 bug,目前没有明确的修复计划。
有新的进展我会通知你。
谢谢
页:
1
[2]