找回密码
 立即注册

QQ登录

只需一步,快速开始

iceman
社区贡献组   /  发表于:2014-8-13 17:50:00
11#
回复 9楼lzechoca的帖子

请问excel文件的来源是什么,或者是图片的来源是什么?是从用户那里获取的还是通过代码生成的?
回复 使用道具 举报
lzechoca
论坛元老   /  发表于:2014-8-15 14:19:00
12#
都是通过代码生成的。
回复 使用道具 举报
iceman
社区贡献组   /  发表于:2014-8-15 16:25:00
13#
回复 12楼lzechoca的帖子

这个问题我这边重现了,会把问题提交给产品组进一步确认。
当前建议您通过 Shape 背景图方式添加图片。大概方法如下:

  1.   FarPoint.Win.Spread.DrawingSpace.RectangleShape rShape = new FarPoint.Win.Spread.DrawingSpace.RectangleShape();
  2.             rShape.Name = "myRect1";
  3.             rShape.Top=rc.Top;
  4.             rShape.Left = rc.Left;
  5.             rShape.Width = rc.Width;
  6.             rShape.Height = rc.Height;

  7.             FarPoint.Win.Picture p = new FarPoint.Win.Picture();
  8.             p.Image = this.fpSpread1.ActiveSheet.Cells[4, 32].Value as Image;

  9.             p.Style = FarPoint.Win.RenderStyle.Stretch;
  10.             rShape.BackgroundImage = p;
  11.             rShape.CanMove = false;
  12.             this.fpSpread1.ActiveSheet.AddShape(rShape);
复制代码
回复 使用道具 举报
lzechoca
论坛元老   /  发表于:2014-8-16 15:02:00
14#
你的代码我大概能够理解,但是我怎么获取当前绘图excel中cell的rectangle呢?而且你代码中没有体现怎样把我内存中的image对象赋值给当前cell的value,下面是我的代码,麻烦你结合我的代码说明一下,在我的程序中该怎么做:
            //第5行8列,张拉示意图
            m_fpSpread.ActiveSheet.AddSpanCell(rowNo, columnNo, 5, 1);
            m_fpSpread.ActiveSheet.Cells[rowNo, columnNo].VerticalAlignment = FarPoint.Win.Spread.CellVerticalAlignment.Center;
            m_fpSpread.ActiveSheet.Cells[rowNo, columnNo].HorizontalAlignment = FarPoint.Win.Spread.CellHorizontalAlignment.Center;
            m_fpSpread.ActiveSheet.Cells[rowNo, columnNo].Border = m_siThinBorder.Border;
            m_fpSpread.ActiveSheet.Cells[rowNo, columnNo].CellType = m_imageCellType;
            m_fpSpread.ActiveSheet.Cells[rowNo, columnNo].Value = m_ReportData._reportHead._bitSchemeValue;
回复 使用道具 举报
lzechoca
论坛元老   /  发表于:2014-8-16 15:08:00
15#
对我的代码我做个详细的解释:
第一行:添加一个跨行跨列的cell
第二行:设置这个cell的垂直放置位置
第三行:设置这个cell的水平放置位置
第四行:设置这个cell的边框显示方式
第五行:设置这个cell的内容类型,对这个cell,是放置图片,m_imageCellType是前面定义的一个成员变量,类型为,FarPoint.Win.Spread.CellType.ImageCellType
第六行:给这个cell的内容赋值,m_ReportData._reportHead._bitSchemeValue是一个其它类对象的成员变量,类型为,Bitmap
回复 使用道具 举报
lzechoca
论坛元老   /  发表于:2014-8-16 15:08:00
16#
我想我应该讲清楚了吧!
回复 使用道具 举报
iceman
社区贡献组   /  发表于:2014-8-18 10:57:00
17#
回复 16楼lzechoca的帖子

恩,说的很清楚。
代码如下:

  1.             fpSpread1.ActiveSheet.AddSpanCell(5, 5, 5, 1);
  2.             fpSpread1.ActiveSheet.Cells[5, 5].VerticalAlignment = FarPoint.Win.Spread.CellVerticalAlignment.Center;
  3.             fpSpread1.ActiveSheet.Cells[5, 5].HorizontalAlignment = FarPoint.Win.Spread.CellHorizontalAlignment.Center;

  4.             ImageCellType m_imageCellType=new ImageCellType();
  5.             fpSpread1.ActiveSheet.Cells[5, 5].CellType = m_imageCellType;

  6.             //获取合并单元格信息
  7.             Rectangle rec = this.fpSpread1.GetCellRectangle(0, 0, 5, 5);

  8.             RectangleShape shape = new RectangleShape();

  9.             //从内存中获取图片使用这句代码
  10.             Image img=Image.FromStream("");
  11.             //Image img = Image.FromFile(Path.Combine(Application.StartupPath, "..\\..\\img\\Untitled.png"));
  12.             shape.BackgroundImage = new FarPoint.Win.Picture(img);
  13.             
  14.             //排除 SheetConner 影响位置
  15.             shape.Top = rec.Top - (int)this.fpSpread1.Sheets[0].SheetCorner.Rows[0].Height;
  16.             shape.Left = rec.Left - (int)this.fpSpread1.Sheets[0].SheetCorner.Columns[0].Width;
  17.             shape.Width= rec.Width;
  18.             shape.Height= rec.Height;

  19.             this.fpSpread1.ActiveSheet.AddShape(shape);
复制代码
回复 使用道具 举报
lzechoca
论坛元老   /  发表于:2014-8-18 15:24:00
18#
//第5行8列,张拉示意图
            m_fpSpread.ActiveSheet.AddSpanCell(rowNo, columnNo, 5, 1);
            m_fpSpread.ActiveSheet.Cells[rowNo, columnNo].VerticalAlignment = FarPoint.Win.Spread.CellVerticalAlignment.Center;
            m_fpSpread.ActiveSheet.Cells[rowNo, columnNo].HorizontalAlignment = FarPoint.Win.Spread.CellHorizontalAlignment.Center;
            m_fpSpread.ActiveSheet.Cells[rowNo, columnNo].Border = m_siThinBorder.Border;
            m_fpSpread.ActiveSheet.Cells[rowNo, columnNo].CellType = m_imageCellType;
            //m_fpSpread.ActiveSheet.Cells[rowNo, columnNo].Value = m_ReportData._reportHead._bitSchemeValue;
            System.Drawing.Rectangle rec = m_fpSpread.GetCellRectangle(0, 0, rowNo, columnNo);
            FarPoint.Win.Spread.DrawingSpace.RectangleShape shape = new FarPoint.Win.Spread.DrawingSpace.RectangleShape();
            //从内存中获取图片使用这句代码
            shape.BackgroundImage = new FarPoint.Win.Picture(m_ReportData._reportHead._bitSchemeValue);
            //排除 SheetConner 影响位置
            shape.Top = rec.Top - (int)this.m_fpSpread.ActiveSheet.SheetCorner.Rows[0].Height;
            shape.Left = rec.Left - (int)this.m_fpSpread.ActiveSheet.SheetCorner.Columns[0].Width;
            shape.Width = rec.Width;
            shape.Height = rec.Height;
            m_fpSpread.ActiveSheet.AddShape(shape);
            columnNo += 1;


以上是我的代码,但是我导出来后行,列都有一个单位错位,我把
System.Drawing.Rectangle rec = m_fpSpread.GetCellRectangle(0, 0, rowNo, columnNo);
改成
System.Drawing.Rectangle rec = m_fpSpread.GetCellRectangle(0, 0, rowNo+1, columnNo+1);
后也不对

导出文件参见附件
11.rar (6 KB, 下载次数: 266)
回复 使用道具 举报
iceman
社区贡献组   /  发表于:2014-8-18 15:59:00
19#
回复 18楼lzechoca的帖子

这个问题我没能重现,请使用我的 Demo 测试看能否重现,并通知我们解决,谢谢:

13472.zip (88.17 KB, 下载次数: 221)
回复 使用道具 举报
lzechoca
论坛元老   /  发表于:2014-8-18 21:36:00
20#
问题暂时解决了,但是为什么这样做就不知道了,解决办法就是把一下两行代码换了个位置(不能提前设置,必须放在排除 SheetConner 影响位置的代码之前设置):
            this.m_fpSpread.ActiveSheet.ColumnHeader.Visible = false;
            this.m_fpSpread.ActiveSheet.RowHeader.Visible = false;


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