序号 标题 名称
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;
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;
using Excel = Microsoft.Office.Interop.Excel;
#6
学习中
#7
关注.
#8
学习,留个屁股在此
#9
不错。
#10
好,感谢笑看烟火
#11
俺也,遇到了这样的问题。学习学习。
#12
不怎么懂,新手!