Как правильно скопировать лист Excel с взаимодействием Office? - PullRequest
0 голосов
/ 21 декабря 2011

Я хочу в цикле копировать листы в Excel, изменять их и сохранять файл Excel. Я использую C #, Excel через COM. Я прочитал этот пример: Открытие листа MS Excel в C #

У меня есть "исходный" лист. Я хочу в цикле скопировать этот исходный лист, изменить 3 ячейки, изменить имя и добавить после исходного листа.

Моя проблема в том, что на второй итерации исходная рабочая таблица отсутствует. В этом примере "1.Babimost-miasto". Это говорит: Индекс не найден. Я предполагаю, что он скопировал это в "1.Babimost-miasto (2)". Но что я делаю не так и как мне этого добиться?

//Get a new workbook.
//oWB = (Excel._Workbook)(oXL.Workbooks.Add(Missing.Value));
oWB = (Excel._Workbook)(oXL.Workbooks.Open(outputFilePath));

//this is source
oSheet = (Excel.Worksheet)oWB.Worksheets["1.Babimost-miasto"];
//oSheet.Copy(Type.Missing, oSheet);

for (int i = 0; i < 5; i++)
{
    //i want a copy
    Excel._Worksheet oSheetCopy = (Excel._Worksheet)oWB.Worksheets["1.Babimost-miasto"];
    //give this copy a new name
    oSheetCopy.Name = (input[i] as OrderedDictionary)[KEY_CITY].ToString();
    //modify in the copy some cells
    oSheetCopy.Cells[1, 1].Value = (input[i] as OrderedDictionary)[KEY_CITY]; //A1
    oSheetCopy.Cells[5, 4].Value = (input[i] as OrderedDictionary)[KEY_2010]; //D5
    oSheetCopy.Cells[45, 2].Value = (input[i] as OrderedDictionary)[KEY_1995]; //B45

    //((Excel._Worksheet)oWB.Sheets["MyTemplate"]).Delete(); // delete template
    //copy the copy after my source worksheet
    oSheetCopy.Copy(Type.Missing, oSheet);
    ((Excel._Worksheet)oWB.Worksheets[(input[0] as OrderedDictionary)[KEY_CITY].ToString()]).Activate();
}

oXL.UserControl = false;
oXL.DisplayAlerts = false;
oWB.Save();
...