使用C#操作EXCEL表的问题: 如何粘贴到插入多行数据?

时间:2022-09-20 20:36:28
使用C#操作EXCEL表的问题:

序号  标题  名称
1     111  AAA
2     222  BBB

目的, 复制1,2行的数据(作为一个整体), 然后粘贴插入行, 假如粘贴插入行两次, 则结果应为:

1  111  AAA
2  222  BBB
3  111  AAA
4  222  BBB
5  111  AAA
6  222  BBB

问题: 该如何实现上面的操作呢?

12 个解决方案

#1


range.Value2 = "多维数组";

速度其快

#2


另一个方法就是:如果你是WinForm编程,你可以直接调用剪切板程序,这样利用了Excel自身特点,速度爽的很

#3




using System;
using System.Data;
using System.Drawing;
using GoldPrinter.ExcelConstants;

namespace GoldPrinter
{
/// <summary>
/// 该类主要定义Excel的程序对象,启动Excel并打印及保存。可能依赖于Interop.VBIDE及Interop.Microsoft.Office.Core,如果需要,请加上。
/// 
/// 作 者:长江支流(周方勇)
/// Email:flygoldfish@163.com  QQ:150439795
/// 网 址:www.webmis.com.cn
/// ★★★★★您可以免费使用此程序,但是请您完整保留此说明,以维护知识产权★★★★★
/// 
/// </summary>
public class ExcelBase
{
private Excel.Application _xlApp; //Excel应用程序
private Excel.Workbook _xlWorkbook; //Excel工作薄,默认只有一个,用Open([Template])创建

private bool _IsVisibledExcel; //打印或预览时是否还要显示Excel窗体
private string _FormCaption; //打印预览Excel窗体的标题栏

private Object oMissing = System.Reflection.Missing.Value;  //实例化参数对象

...

#region 插入整行、整列InsertRow(int p_rowIndex)、InsertColumn(int p_colIndex)、InsertColumn(string p_colChars)
/// <summary>
/// 在指定的行上插入一整行
/// </summary>
/// <param name="p_rowIndex">行索引</param>
public void InsertRow(int p_rowIndex)
{
//    Rows("2:2").Select
//    Selection.Insert Shift:=xlDown

Excel.Range range;

range = GetRange(p_rowIndex,"A");
range.Select();

//Excel2003支持两参数
//range.EntireRow.Insert(oMissing,oMissing);

//Excel2000支持一个参数,经过测试,用Interop.ExcelV1.3(Excel2000),可以正常运行在Excel2003中
range.EntireRow.Insert(oMissing);
}

/// <summary>
/// 用模板行在指定的行上插入,即Excel的插入复制单元格
/// </summary>
/// <param name="p_rowIndex"></param>
/// <param name="p_templateRowIndex"></param>
public void InsertRow(int p_rowIndex,int p_templateRowIndex)
{
Excel.Range range;
range = (Excel.Range)_xlApp.Rows[p_templateRowIndex.ToString() + ":" + p_templateRowIndex.ToString(),oMissing];
range.Select();
range.Copy(oMissing);

InsertRow(p_rowIndex);
}

...

}//End class
}//End Namespace

#4



 Excel.Application xlApp = new Excel.Application();
    Excel.Workbook wb = xlApp.Workbooks.Add(Excel.XlWBATemplate.xlWBATWorksheet);
    Excel.Worksheet ws = (Excel.Worksheet)wb.Worksheets[1];
    xlApp.Visible = true;

     ws.Cells[1, 1] = "hello world";

    ((Excel.Range)ws.Rows["1:2", Type.Missing]).Select();
    ((Excel.Range)xlApp.Selection).Copy(Type.Missing);

    ((Excel.Range)ws.Rows["3:3", Type.Missing]).Select();
    ((Excel.Worksheet)xlApp.ActiveSheet).Paste(Type.Missing, Type.Missing);

    ((Excel.Range)ws.Rows["5:5", Type.Missing]).Select();
    ((Excel.Worksheet)xlApp.ActiveSheet).Paste(Type.Missing, Type.Missing);

    xlApp.ActiveWorkbook.Close(null, null, null); ;
    xlApp.Quit();

#5


少一个
using Excel = Microsoft.Office.Interop.Excel; 

#6


学习中

#7


关注.

#8


学习,留个屁股在此

#9


不错。

#10


好,感谢笑看烟火

#11


俺也,遇到了这样的问题。学习学习。

#12


不怎么懂,新手!

#1


range.Value2 = "多维数组";

速度其快

#2


另一个方法就是:如果你是WinForm编程,你可以直接调用剪切板程序,这样利用了Excel自身特点,速度爽的很

#3




using System;
using System.Data;
using System.Drawing;
using GoldPrinter.ExcelConstants;

namespace GoldPrinter
{
/// <summary>
/// 该类主要定义Excel的程序对象,启动Excel并打印及保存。可能依赖于Interop.VBIDE及Interop.Microsoft.Office.Core,如果需要,请加上。
/// 
/// 作 者:长江支流(周方勇)
/// Email:flygoldfish@163.com  QQ:150439795
/// 网 址:www.webmis.com.cn
/// ★★★★★您可以免费使用此程序,但是请您完整保留此说明,以维护知识产权★★★★★
/// 
/// </summary>
public class ExcelBase
{
private Excel.Application _xlApp; //Excel应用程序
private Excel.Workbook _xlWorkbook; //Excel工作薄,默认只有一个,用Open([Template])创建

private bool _IsVisibledExcel; //打印或预览时是否还要显示Excel窗体
private string _FormCaption; //打印预览Excel窗体的标题栏

private Object oMissing = System.Reflection.Missing.Value;  //实例化参数对象

...

#region 插入整行、整列InsertRow(int p_rowIndex)、InsertColumn(int p_colIndex)、InsertColumn(string p_colChars)
/// <summary>
/// 在指定的行上插入一整行
/// </summary>
/// <param name="p_rowIndex">行索引</param>
public void InsertRow(int p_rowIndex)
{
//    Rows("2:2").Select
//    Selection.Insert Shift:=xlDown

Excel.Range range;

range = GetRange(p_rowIndex,"A");
range.Select();

//Excel2003支持两参数
//range.EntireRow.Insert(oMissing,oMissing);

//Excel2000支持一个参数,经过测试,用Interop.ExcelV1.3(Excel2000),可以正常运行在Excel2003中
range.EntireRow.Insert(oMissing);
}

/// <summary>
/// 用模板行在指定的行上插入,即Excel的插入复制单元格
/// </summary>
/// <param name="p_rowIndex"></param>
/// <param name="p_templateRowIndex"></param>
public void InsertRow(int p_rowIndex,int p_templateRowIndex)
{
Excel.Range range;
range = (Excel.Range)_xlApp.Rows[p_templateRowIndex.ToString() + ":" + p_templateRowIndex.ToString(),oMissing];
range.Select();
range.Copy(oMissing);

InsertRow(p_rowIndex);
}

...

}//End class
}//End Namespace

#4



 Excel.Application xlApp = new Excel.Application();
    Excel.Workbook wb = xlApp.Workbooks.Add(Excel.XlWBATemplate.xlWBATWorksheet);
    Excel.Worksheet ws = (Excel.Worksheet)wb.Worksheets[1];
    xlApp.Visible = true;

     ws.Cells[1, 1] = "hello world";

    ((Excel.Range)ws.Rows["1:2", Type.Missing]).Select();
    ((Excel.Range)xlApp.Selection).Copy(Type.Missing);

    ((Excel.Range)ws.Rows["3:3", Type.Missing]).Select();
    ((Excel.Worksheet)xlApp.ActiveSheet).Paste(Type.Missing, Type.Missing);

    ((Excel.Range)ws.Rows["5:5", Type.Missing]).Select();
    ((Excel.Worksheet)xlApp.ActiveSheet).Paste(Type.Missing, Type.Missing);

    xlApp.ActiveWorkbook.Close(null, null, null); ;
    xlApp.Quit();

#5


少一个
using Excel = Microsoft.Office.Interop.Excel; 

#6


学习中

#7


关注.

#8


学习,留个屁股在此

#9


不错。

#10


好,感谢笑看烟火

#11


俺也,遇到了这样的问题。学习学习。

#12


不怎么懂,新手!