在追加三列之后将数据写入错误的位置

本文关键字:数据 错误 位置 之后 追加 三列 | 更新日期: 2023-09-27 18:21:48

我将数据从一个位置复制到另一个位置,能够读取和打印所有值,并能够在Excel文件中附加三列。所以现在A、B、C列变成了D、E、F(移位)等

            Excel.Application app = new Excel.Application();
            Excel.Workbooks workbooks = app.Workbooks;
            string newlocation_filename = @"C:'Windows'Temp'" + FileName;
            File.Copy(FilePath, newlocation_filename, true);
            //string filename = FilePath;
            workbooks.Open(newlocation_filename);
            Excel.Workbook workbook = workbooks.Item[1];
            Excel.Sheets worksheets = workbook.Worksheets;
            Excel.Worksheet worksheet = (Worksheet)worksheets.Item[1];
            Excel.Range cells = worksheet.UsedRange;
            Range oRng = worksheet.Range["A1"];
           oRng.EntireColumn.Insert(XlInsertShiftDirection.xlShiftToRight,XlInsertFormatOrigin.xlFormatFromRightOrBelow);
            oRng = worksheet.Range["B1"];
             oRng.EntireColumn.Insert(XlInsertShiftDirection.xlShiftToRight,XlInsertFormatOrigin.xlFormatFromRightOrBelow);
            oRng = worksheet.Range["C1"];
            oRng.EntireColumn.Insert(XlInsertShiftDirection.xlShiftToRight,XlInsertFormatOrigin.xlFormatFromRightOrBelow);
            cells[1, 1] = "AccountNumber";//Set value for row 1 and column 2 (A1)
            cells[1, 2] = "CustomerName";
            cells[1, 3] = "ComparisionResult";//Set value for row 1 and column 3 (B1)
            workbook.Save();//Save Excel-File
            app.Quit();
        }

根据上述代码AccountNumberCustomerNameComparisionResult需要分别设置在A1、B1、C1单元中(添加新列)。但是它替换D1、E1、F1(旧的A1、B1、C1表示附加之前)字段值中的数据,并且A1、B1和C1字段值不更新。我认为它替换了数据,然后正在进行追加。

是否需要任何更新语句来解决此问题?

在追加三列之后将数据写入错误的位置

Tim几乎做对了,但严格来说,问题并不是与UsedRange的错误使用有关,而是与后来发生的插入有关,这些插入会影响已经分配的范围变量。您首先分配:

Excel.Range cells = worksheet.UsedRange;

此时,cells[1, 1]A1,因为后者实际上是第一个使用的小区。但是,当稍后在开始时插入三列时,您设置的任何范围都将向右移动3个位置。所以在三次插入之后,cells[1, 1]D1,而不是A1。此偏移将应用于任何范围对象,不仅(但包括)UsedRange

正是由于这个原因,cells[1, 1] = "AccountNumber";实际上写入D1而不是A1

解决方案是将范围向后移动以补偿添加的插入。您可以在写入单元格之前添加此行:

cells = cells.Offset(0, -3);
cells[1, 1] = "AccountNumber";
// etc...

UsedRange不一定从A1开始,所以如果你使用的范围是(例如)D1:F20,那么UsedRange.Cells[1,1]就是D1。

因此,如果要可靠地更新图纸上的固定位置,请不要将UsedRange用作cells的基础。

相反,使用类似的东西

 worksheet.Range["A1"] = "AccountNumber";