附加三列后将数据写入错误位置
Writing data in wrong location after appending three columns
我将数据从一个位置复制到另一个位置,并且能够读取和打印所有值并能够在 Excel 文件中附加三列。所以现在A、B、C列变成了D、E、F(Shifting)等等。
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();
}
从上面的代码AccountNumber
、CustomerName
、ComparisionResult
分别需要在A1、B1、C1单元格(追加新列)中设置。但
它替换了 D1、E1、F1(旧的 A1、B1、C1 表示附加之前)字段值中的数据,并且 A1、B1、C1 字段值没有更新。我认为它替换了数据然后附加发生了。
是否需要更新语句来解决这个问题?
UsedRange
不一定从 A1 开始,所以如果您使用的范围是(例如)D1:F20,那么 UsedRange.Cells[1,1]
就是 D1。
因此,如果您想可靠地更新 sheet 上的固定位置,请不要使用 UsedRange
作为 cells
的基础。
而是使用类似的东西:
worksheet.Range["A1"] = "AccountNumber";
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...
我将数据从一个位置复制到另一个位置,并且能够读取和打印所有值并能够在 Excel 文件中附加三列。所以现在A、B、C列变成了D、E、F(Shifting)等等。
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();
}
从上面的代码AccountNumber
、CustomerName
、ComparisionResult
分别需要在A1、B1、C1单元格(追加新列)中设置。但
它替换了 D1、E1、F1(旧的 A1、B1、C1 表示附加之前)字段值中的数据,并且 A1、B1、C1 字段值没有更新。我认为它替换了数据然后附加发生了。
是否需要更新语句来解决这个问题?
UsedRange
不一定从 A1 开始,所以如果您使用的范围是(例如)D1:F20,那么 UsedRange.Cells[1,1]
就是 D1。
因此,如果您想可靠地更新 sheet 上的固定位置,请不要使用 UsedRange
作为 cells
的基础。
而是使用类似的东西:
worksheet.Range["A1"] = "AccountNumber";
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...