我将数据从一个位置复制到另一个位置,并且能够读取和打印所有值,并能够在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();
}
从上面的代码AccountNumber
,CustomerName
,ComparisionResult
需要分别在A1,B1,C1单元格(追加的新列)中进行设置。但
它替换D1,E1,F1中的数据(旧的A1,B1,C1表示附加前的含义)字段值,A1,B1,C1字段值不更新。我认为它取代了数据然后附加正在发生。
需要任何Update语句才能解决此问题吗?
答案 0 :(得分:2)
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...
答案 1 :(得分:1)
int a, b;
不一定从A1开始,所以如果您使用的范围是(例如)D1:F20那么UsedRange
是D1。
因此,如果您想要可靠地更新工作表上的固定位置,请不要使用UsedRange.Cells[1,1]
作为UsedRange
的基础。
而是使用类似的东西:
cells