2012-03-30 108 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; 

坦率地说,我如果它打开文件,它甚至不确定。工作簿标识值为空。我为这两个工作簿传递了有效的路径。我在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'(宏免费工作簿)? – 2012-03-30 22:23:10

+0

那么,窗体上有需要在那里的宏,我只是想确保上传时没有掺假宏。所以我试图将上传文档的单元格复制到原始分布式模板文档的副本中。我也试图从上传的文档中保留单元格的任何格式/样式更改,并将其保留在复制的版本中(我知道背景中的宏是合法的。 – 2012-03-31 03:08:02

回答

0

我的问题是我运行了两个excel.exe实例,每个实例都加载一个工作簿。在同一个应用程序实例中加载两个工作簿解决了我的问题。

相关问题