找回密码
 立即注册

QQ登录

只需一步,快速开始

iceman
社区贡献组   /  发表于:2013-11-19 09:49:00
11#
回复 10楼hptj的帖子

设置固定打印范围代码如下:

  1. //以固定行列值设置打印范围
  2.             pt.RowStart = 1;
  3.             pt.RowEnd = 3;
  4.             pt.ColStart = 1;
  5.             pt.ColEnd = 3;
  6.             pt.PrintType = FarPoint.Win.Spread.PrintType.CellRange;
复制代码
回复 使用道具 举报
hptj
高级会员   /  发表于:2013-11-19 10:04:00
12#
我们有上百个xls,不可能一个一个设,每个都可能不一样,可以自动设吗?那个文字消失的截图您看到了吗。您发给我的test.rar里也一样消失了,我再上传一下,您仔细看看

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复 使用道具 举报
iceman
社区贡献组   /  发表于:2013-11-19 10:07:00
13#
回复 9楼hptj的帖子

确实存在这样的问题,我查看了原因,Excel 中显示不全文字的垂直对齐方式为居中对齐,可以通过以下带修改:
this.fpSpread1.ActiveSheet.Rows[22].VerticalAlignment = CellVerticalAlignment.Top;

我会把这个问题上报给产品组,收到反馈后回复。
回复 使用道具 举报
hptj
高级会员   /  发表于:2013-11-19 10:13:00
14#
设置打印区域只能一个sheet一个sheet的设置行和列吗,有没有PrintArea之类的属性可以一下获取整个Sheet的打印区域?(对于上百个xls,每个的打印区域都可能不一样,一个一个设置太麻烦)
回复 使用道具 举报
iceman
社区贡献组   /  发表于:2013-11-19 10:36:00
15#
回复 14楼hptj的帖子

hptj 你好,
“GetLastNonEmptyColumn行吗,我们有的列有内容,但XLS中设置为打印区域之外 ”

我理解这句话的意思是:
表单中有肯能有 10 列,但是只想打印前 9 列。是否正确呢?
这种情况需要通过 11# 代码实现。

或者,你的意思是打印不固定行列数的表单?那么可以通过获取获取最后非空行列值来实现。

  1.             //设置打印范围
  2.             pt.RowEnd = this.fpSpread1.Sheets[0].GetLastNonEmptyRow(FarPoint.Win.Spread.NonEmptyItemFlag.Data);
  3.             pt.ColEnd = this.fpSpread1.Sheets[0].GetLastNonEmptyColumn(FarPoint.Win.Spread.NonEmptyItemFlag.Data);
复制代码
回复 使用道具 举报
hptj
高级会员   /  发表于:2013-11-19 10:44:00
16#
“表单中有肯能有 10 列,但是只想打印前 9 列。”就是这个意思,但我们有上百个xls上千个sheet,11#的代码岂非要一个一个设?这太麻烦了吧,Excel本身有一个打印区域设置,FarPoint可不可以获取这个打印区域,这样就不用手动设置每个打印sheet的行数和列数了
回复 使用道具 举报
iceman
社区贡献组   /  发表于:2013-11-19 15:50:00
17#
回复 16楼hptj的帖子

你好,
经调查 Spread 可以拿到 Excel 中的 “打印区域设置”信息,获取代码如下:

  1. private void Form1_Load(object sender, EventArgs e)
  2.         {
  3.             this.fpSpread1.OpenExcel("原始文件.xls");


  4.             PrintInfo pt = this.fpSpread1.Sheets[1].PrintInfo;
  5.             pt.Orientation = PrintOrientation.Landscape;
  6.             pt.PrintToPdf = true;
  7.             pt.PdfFileName = "test.pdf";
  8.             pt.ZoomFactor = 0.75f;
  9.             pt.ShowColor = true;

  10.             pt.UseSmartPrint = true;

  11.             this.fpSpread1.Sheets[1].PrintInfo = pt;
  12.             this.fpSpread1.AllowCellOverflow = true;
  13.             this.fpSpread1.Sheets[1].Rows[22].VerticalAlignment = CellVerticalAlignment.Top;
  14.             this.fpSpread1.PrintSheet(1);
  15.         }
复制代码
回复 使用道具 举报
hptj
高级会员   /  发表于:2013-11-20 10:19:00
18#
回复 17楼iceman的帖子

您好,目前总结就是两个问题:
1、如果FarPoint不能自动缩放sheet中的内容来适应PDF大小,那么可以改变PDF页面大小来适应不同的sheet大小吗?
2、近千个sheet,没办法一个一个找到那些生成PDF可能文字消失的单元格,控件可以自动解决这种排版问题吗(毕竟原始文件中这些文字是可以显示完全的)?(目前的方式是:   this.fpSpread1.Sheets[1].Rows[22].VerticalAlignment = CellVerticalAlignment.Top;)
回复 使用道具 举报
iceman
社区贡献组   /  发表于:2013-11-20 14:45:00
19#
回复 18楼hptj的帖子

第一个问题,可以先获取默认打印纸张大小。再计算所有打印列的宽度,计算缩放程度:

  1. this.fpSpread1.OpenExcel("原始文件.xls");

  2.             SheetView sv = this.fpSpread1.Sheets[1];
  3.             PrintInfo pt = this.fpSpread1.Sheets[1].PrintInfo;
  4.             pt.Orientation = PrintOrientation.Landscape;
  5.             pt.PrintToPdf = true;
  6.             pt.PdfFileName = "test.pdf";

  7.             //获取 Spread 中的实际打印宽度
  8.             int startCol = pt.ColStart;
  9.             int colEnd = pt.ColEnd;
  10.             float printWidth = 0;
  11.             for (int i = startCol; i <= colEnd; i++)
  12.             {
  13.                 printWidth += sv.Columns[i].Width;
  14.             }

  15.             //获取默认纸张打印宽度
  16.             PrintDocument pd = new PrintDocument();
  17.             float actualPageWidth = pd.DefaultPageSettings.PaperSize.Width;

  18.             pt.ZoomFactor = (printWidth > actualPageWidth) ? actualPageWidth / printWidth : 1f;
  19.             pt.ShowColor = true;
复制代码


2.这个问题我已经提交给产品组,在得到回复后我会反馈给你。由于时差和处理顺序问题,需要几天时间,请稍候。
回复 使用道具 举报
iceman
社区贡献组   /  发表于:2013-12-4 15:31:00
20#
回复 18楼hptj的帖子

hptj 你好,
“2、近千个sheet,没办法一个一个找到那些生成PDF可能文字消失的单元格,控件可以自动解决这种排版问题吗(毕竟原始文件中这些文字是可以显示完全的)?(目前的方式是:   this.fpSpread1.Sheets[1].Rows[22].VerticalAlignment = CellVerticalAlignment.Top;)”

这个问题已经确认为 bug,目前没有明确的修复计划。
有新的进展我会通知你。

谢谢
回复 使用道具 举报
12
您需要登录后才可以回帖 登录 | 立即注册
返回顶部