找回密码
 立即注册

QQ登录

只需一步,快速开始

bingdaoice

中级会员

44

主题

208

帖子

608

积分

中级会员

积分
608
bingdaoice
中级会员   /  发表于:2020-7-10 09:08  /   查看:3604  /  回复:6
1金币
请问如何将一个Sheet工作表的全部内容直接插入另一个工作表中的指定位置?
例如:我想将图1工作表的内容,全部插入到图2的开头位置(无损插入,格式、数据、内容均无变化的插入)

image.png861022949.png

image.png637451171.png

最佳答案

查看完整内容

刚好有另一个客户咨询类似问题,通过ClipboardCopy,ClipboardCut,来复制或者剪切 然后ClipboardPaste粘贴到另一个sheet中即可 参考帖子中14楼的代码 https://gcdn.grapecity.com.cn/forum.php?mod=viewthread&tid=77681&extra=page%3D1

6 个回复

倒序浏览
最佳答案
最佳答案
Richard.Ma讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2020-7-10 09:08:27
来自 3#
本帖最后由 Richard.Ma 于 2020-7-10 12:04 编辑

刚好有另一个客户咨询类似问题,通过ClipboardCopy,ClipboardCut,来复制或者剪切
然后ClipboardPaste粘贴到另一个sheet中即可
参考帖子中14楼的代码
https://gcdn.grapecity.com.cn/forum.php?mod=viewthread&tid=77681&extra=page%3D1
回复 使用道具 举报
bingdaoice
中级会员   /  发表于:2020-7-10 09:24:55
2#
本帖最后由 bingdaoice 于 2020-7-10 10:24 编辑

我目前使用的方法是这样的,但这个方法有一点小问题,就是有些数据的格式复制过去后,有细微的差别。例如在原表格中是换了行的,但是在复制之后的表格中却没有换行。

FpSpread Spread2 = new FpSpread();
            Spread2.Open(p_certif.GetRecdTempFile(tpId, false));
            sv.AddRows(RowIndex, Spread2.Sheets[0].RowCount);
            for (int r = 0; r < Spread2.Sheets[0].RowCount; r++)
            {
                for (int c = 0; c < Spread2.Sheets[0].ColumnCount; c++)// copy span;  
                {
                    var spans = Spread2.Sheets[0].GetSpanCell(r, c);
                    if (spans != null && spans.Row == r && spans.Column == c)
                    {
                        sv.AddSpanCell(RowIndex + r, c, spans.RowCount, spans.ColumnCount);
                    }
                    var cell = Spread2.Sheets[0].Cells[r, c];
                    if (!String.IsNullOrEmpty(cell.Formula))//copy formula and value
                    {
                        sv.SetFormula(RowIndex + r, c, cell.Formula);
                    }
                    else
                    {
                        sv.SetValue(RowIndex + r, c, cell.Value);
                    }
                    sv.SetTag(RowIndex + r, c, cell.Tag);
                    var style2 = Spread2.Sheets[0].GetStyleInfo(r, c);
                    if (style2 != null)
                    {
                        style2 = Spread2.Sheets[0].GetStyleInfo(r, c, new StyleInfo());
                        sv.SetStyleInfo(RowIndex + r, c, style2);
                    }
                }
            }
            if (AddPic == true)
            {
                foreach (FarPoint.Win.Spread.DrawingSpace.PSObject shape in Spread2.Sheets[0].DrawingContainer.ContainedObjects)
                {
                    if (shape != null && shape.BackgroundImage != null)
                    {
                        var newshape = shape.Clone() as FarPoint.Win.Spread.DrawingSpace.PSShape;
                        sv.AddShape(newshape);
                    }
                }
            }


回复 使用道具 举报
bingdaoice
中级会员   /  发表于:2020-7-10 11:24:07
4#
本帖最后由 bingdaoice 于 2020-7-10 11:37 编辑

1、可以给一个代码示例吗?谢谢版主。2、通过ClipboardCopy,ClipboardCut,来复制或者剪切,然后ClipboardPaste粘贴到另一个sheet中即可。
此种方式是不是会受到外部复制内容的影响?
例如:我生成300份证书时,会需要一定的时间。
那么此时间我可能会切换到EXCEL中进行编辑,可能会用到复制、粘贴。
那么此时在EXCEL中的复制、粘贴就会影响程序中的Sheet进行的操作,从而导致生成的证书有错误。会有这种情况吗?




回复 使用道具 举报
Richard.Ma讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2020-7-10 13:44:24
5#
本帖最后由 Richard.Ma 于 2020-7-10 13:47 编辑

示例代码我就在我发你的链接中的14楼,通过
设置选择区域>>复制或剪切>>设置选择区域>>粘贴
即可完成
2.这个因为需要使用系统的剪切板,如果系统剪切板同时有其他程序使用,确实有可能是会受到影响的
如果你是是同一个sheet中操作,那么是可以选择CopyRange和MoveRange的,但是我看你是在不同的sheet中操作,那只能这种方式

回复 使用道具 举报
bingdaoice
中级会员   /  发表于:2020-7-10 15:21:02
6#
好的,谢谢
回复 使用道具 举报
Richard.Ma讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2020-7-10 15:47:39
7#
不客气
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部