2012-03-30 4 views
0

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

Честно говоря, я m даже не уверен, что он открывает файл. Значение Identity рабочей книги равно null. Я передаю действительный путь для обеих книг. Я использую полный путь, включая имя файла в методе 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); 
} 
+0

Почему бы просто не сохранить его как '.XLSX' (макроэкономическая книга)? –

+0

Ну, есть макросы в форме, которая должна быть там, я просто хочу, чтобы при загрузке не было фальсифицированных макросов. Поэтому я пытаюсь скопировать ячейку по ячейке загруженного документа в копию исходного документа с распределенным шаблоном. Я также пытаюсь сохранить любые изменения форматирования/стиля в ячейках из загруженного документа и сохранить их в скопированной версии (с макросами в фоновом режиме, которые я точно знаю, являются законными. –

ответ

0

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