我正在尝试将excel表中列Q前面的列B移动,作为我正在处理的报告的一部分.我有VBA的经验,但在c#中相对较少,所以我花了最后一小时在谷歌上找不到解决方案,我觉得这应该很简单,但我不能完全理解.
方法一,导致"Range类的插入方法失败"msg.
Excel.Range rngCut1 = JobLabourSheet.get_Range("B:B", Type.Missing);
Excel.Range rngPaste1 = JobLabourSheet.get_Range("Q:Q", Type.Missing);
rngCut1.Columns.Cut(rngPaste1.EntireColumn.Insert(Excel.XlInsertShiftDirection.xlShiftToRight, rngCut1));
Run Code Online (Sandbox Code Playgroud)
方法二导致"无法获取Range类的Cut属性"msg.
Excel.Range rngCut1 = JobLabourSheet.get_Range("B:B", Type.Missing);
Excel.Range rngPaste1 = JobLabourSheet.get_Range("Q:Q", Type.Missing);
rngCut1.Columns.Cut(rngPaste1.EntireColumn.Insert(Excel.XlInsertShiftDirection.xlShiftToRight, Missing.Value));
Run Code Online (Sandbox Code Playgroud)
在第二种方法中,当我省略CopyOrigin时,我得到了msg,但它确实在列Q前插入了一个空白列.
在VBA中,我将使用以下内容:
Columns("B:B").Cut
Columns("Q:Q").Insert Shift:=xlToRight
Run Code Online (Sandbox Code Playgroud)
但就像我说的那样,我的c#体验目前是有限的,所以我不知道如何将它翻译成c#
这不是很直观,但这就是我让它工作的方式。我采用“插入”范围并使用 Insert() 方法,并传递“range.Cut()”方法作为“复制原点”参数。
参考文档:
这是一个示例应用程序(请务必添加对 Microsoft.Office.Interop.Excel 的引用):
using System;
using System.Collections.Generic;
using System.Text;
using Excel = Microsoft.Office.Interop.Excel;
namespace ExcelCutAndInsertColumn
{
class Program
{
static void Main(string[] args)
{
Excel.Application xlApp = new Excel.Application();
Excel.Workbook xlWb = xlApp.Workbooks.Open(@"C:\stackoverflow.xlsx");
Excel.Worksheet xlWs = (Excel.Worksheet)xlWb.Sheets[1]; // Sheet1
xlApp.Visible = true;
// cut column B and insert into A, shifting columns right
Excel.Range copyRange = xlWs.Range["B:B"];
Excel.Range insertRange = xlWs.Range["A:A"];
insertRange.Insert(Excel.XlInsertShiftDirection.xlShiftToRight, copyRange.Cut());
}
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9657 次 |
| 最近记录: |