我們的應用程序具有分發功能。它需要幾個Excel 2007電子表格,將它們複製到一張表中,然後通過電子郵件發送給用戶。問題是圖像和圖表不能複製。我已經嘗試了一切,我可以在這裏找到各種其他來源,但遺憾的是,似乎沒有任何工作。我們的應用程序使用VSTO編寫,我也嘗試過OpenXML,但似乎沒有任何工作。實際上,試圖在OpenXML中進行復制會嚴重破壞文件,使Excel無法讀取或恢復文件。這裏是我們使用的代碼(注意:我們有ExcelWrapper只需調用Excel應用程序中的相同功能,但隱藏了所有可選項目)。如何將Excel工作表複製到新工作簿中並帶來所有圖表,圖像等?
private void CreateWorkbook(string filePath, string batchReportsPath)
{
//place the xlsx file into a workbook.
//call getfilesnames
Excel.Workbook bookToCopy;
Excel.Workbook newWorkbook;
Excel.Worksheet tempSheet = new Excel.Worksheet();
newWorkbook = ExcelWrapper.WorkbooksAdd(ExcelApp.Workbooks);
if (File.Exists(filePath))
File.Delete(filePath);
ExcelWrapper.WorkbookSaveAs(newWorkbook, filePath);
List<string> filePaths = new List<string>(Directory.GetFiles(batchReportsPath));
filePaths.ForEach(delegate(string reportPath)
{
string reportPathAndName = reportPath;
bookToCopy = ExcelWrapper.WorkbooksOpen(ExcelApp.Workbooks, reportPathAndName);
int nextSheetNumber = newWorkbook.Sheets.Count;
((Excel.Worksheet)sheetToSend.Sheets[1]).Copy(Type.Missing, newWorkbook.Sheets[nextSheetNumber]);
ExcelWrapper.WorkbookClose(bookToCopy);
});
newWorkbook.Save();
ExcelWrapper.WorkbookClose(newWorkbook);
bookToCopy= null;
tempSheet = null;
newWorkbook = null;
GC.Collect();
GC.WaitForPendingFinalizers();
GC.Collect();
GC.WaitForPendingFinalizers();
}
我都想盡前途的選擇和搜索兩個VSTO和OpenXML的對象模型和我難倒。請stackoverflow社區,你是我唯一的希望。
UPDATE:答案在這裏的鄉親:
//Copy all the images, Charts, shapes
foreach (Excel.Shape o in copySheet.Shapes)
{
if (o.Type == Microsoft.Office.Core.MsoShapeType.msoPicture)
o.CopyPicture();
else
o.Copy();
newWorkbook.Save();
}
你需要做的每個副本後保存獲得粘貼來完成。感謝您的輸入。
不要你的意思是「救救我,計算器社區,你是我唯一的希望」 ... –
DarinH
2011-06-08 20:44:22