Итак, все, что я пытаюсь сделать - это скопировать каждую ячейку из одного документа 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);
}