So, all I’m trying to do is copy over every cell from one Excel doc to another, with the intent of preventing a user to upload a file containing macros onto my server. When I run this through with a test form it asks me where to save the “Clean” document, but it appears as though no changes were made to it, except the timestamp…
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;
Frankly, I’m not even certain if it’s opening the file. The workbook Identity value is null. I’m passing a valid path for both workbooks. I’m using the full path including file name in the Application.Worksheets.Open method. Is this not correct?
What am I missing? It’s not throwing any exceptions…
==================================================================================
For posterity, this is how I solved it:
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);
}
My issue was that I was running two instances of excel.exe, loading one workbook into each. Loading both workbooks in the same Application instance solved my problem.