Почему это не спасет мои изменения? Или это не копирование? - PullRequest
0 голосов
/ 31 марта 2012

Итак, все, что я пытаюсь сделать - это скопировать каждую ячейку из одного документа Excel в другой, чтобы пользователь не мог загрузить файл, содержащий макросы, на мой сервер. Когда я проверяю это с помощью тестовой формы, он спрашивает меня, где сохранить «чистый» документ, но кажется, что в него не было внесено никаких изменений, кроме метки времени ...

object objMissing = Missing.Value;
Excel.Workbook xlDirtyWorkbook = xlDirtyApp.Workbooks.Open(strDirtyDocPath,
                                            objMissing, objMissing, objMissing,
                                            objMissing, objMissing, objTrue,
                                            objMissing, objMissing, objMissing,
                                            objMissing, objMissing, objMissing,
                                            objMissing, objMissing);
Excel.Worksheet xlDirtyWorksheet = 
      (Excel.Worksheet)xlDirtyWorkbook.Worksheets[1];

Excel.Workbook xlCleanWorkbook = xlCleanApp.Workbooks.Open(strCleanDocPath,
                                            objMissing, objMissing, objMissing,
                                            objMissing, objMissing, objTrue,
                                            objMissing, objMissing, objMissing,
                                            objMissing, objMissing, objMissing,
                                            objMissing, objMissing);
Excel.Worksheet xlCleanWorksheet = 
      (Excel.Worksheet)xlCleanWorkbook.Worksheets[1];

// -- Copy User Modifiable Range --
Excel.Range rnThisDirtyCell = xlDirtyWorksheet.get_Range("A2:L310", objMissing);
Excel.Range rnThisCleanCell = xlCleanWorksheet.get_Range("A2:L310", objMissing);

rnThisDirtyCell.Copy(rnThisCleanCell);

// -- Copy Document Meta-Data --
object dpDirtyProps;
object dpCleanProps;

dpDirtyProps = xlDirtyWorkbook.BuiltinDocumentProperties;
dpCleanProps = xlCleanWorkbook.BuiltinDocumentProperties;

dpCleanProps = dpDirtyProps;

Честно говоря, я даже не уверен, что он открывает файл. Значение идентификатора рабочей книги равно нулю. Я передаю правильный путь для обеих книг. Я использую полный путь, включая имя файла в методе Application.Worksheets.Open. Разве это не правильно?

Чего мне не хватает? Это не исключение каких-либо исключений ...

=============================================== ===================================

Для потомков, вот как я это решил:

Excel.Workbook xlDirtyWorkbook = xlApp.Workbooks.Open(strDirtyDocPath,
                                 objMissing, objMissing, objMissing,
                                 objMissing, objMissing, true,
                                 objMissing, objMissing, objMissing,
                                 objMissing, objMissing, objMissing,
                                 objMissing, objMissing);

Excel.Workbook xlCleanWorkbook = xlApp.Workbooks.Open(strCleanTemplatePath,
                                 objMissing, objMissing, objMissing,
                                 objMissing, objMissing, true,
                                 objMissing, objMissing, objMissing,
                                 objMissing, objMissing, objMissing,
                                 objMissing, objMissing);

for (int iIndex = 1; iIndex <= xlDirtyWorkbook.Worksheets.Count; iIndex++ )
{
    rnThisDirtyCell = xlDirtyWorkbook.Worksheets[iIndex].UsedRange;
    rnThisCleanCell = xlCleanWorkbook.Worksheets[iIndex].Range(
        rnThisDirtyCell.Address);
    rnThisDirtyCell.Copy(rnThisCleanCell);
}

1 Ответ

0 голосов
/ 04 апреля 2012

Моя проблема заключалась в том, что я запускал два экземпляра Excel.exe, загружая по одной книге в каждую. Загрузка обеих книг в одном экземпляре приложения решила мою проблему.

...