我正在尝试使用形状对象在 Excel 中添加 pdf 文件。但每次我得到以下异常:
Cannot insert object.
at System.RuntimeType.ForwardCallToInvokeMember(String memberName, BindingFlags flags, Object target, Int32[] aWrapperTypes, MessageData& msgData)
at Microsoft.Office.Interop.Excel.Shapes.AddOLEObject(Object ClassType, Object Filename, Object Link, Object DisplayAsIcon, Object IconFileName, Object IconIndex, Object IconLabel, Object Left, Object Top, Object Width, Object Height)
at WordSample.Form1.button1_Click(Object sender, EventArgs e) in C:\Test Projects\WordSample\WordSample\Form1.cs:line 30
代码:
private void button1_Click(object sender, EventArgs e)
{
try
{
Excel.Application app = new Excel.Application();
Excel.Workbook wb = null;
wb = app.Workbooks.Open(@"C:\Temp_Statoil\mal_malingsprogram.xls",
Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing,
Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing);
InsertStaticIndexSheetsPreWpkTemplate(wb);
Excel._Worksheet wsMal = (Excel._Worksheet)wb.Sheets[pageTemplate];
Excel._Worksheet wsTotalOverView = (Excel._Worksheet)wb.Sheets[pageTotal];
//foreach (Excel.Worksheet ws in wb.Worksheets)
// sheetNames.Add(ws.Name);
wsMal.Copy(wsMal, Type.Missing);
Excel._Worksheet wsCurrent = (Excel._Worksheet)wb.Sheets[(wsMal.Index - 1)];
Excel.Range unitIcon = wsCurrent.get_Range("K11", Type.Missing);
Excel.Shape shape = wsCurrent.Shapes.AddOLEObject(
Type.Missing,
@"C:\Temp_Statoil\tmpFiles\1C9.pdf",
false,
true,
@"C:\Temp_Statoil\pdf.ico",
0,
"Doubleclick to open drawing for 1C9",
unitIcon.Left,
unitIcon.Top,
Type.Missing,
Type.Missing);
shape.Locked = false;
shape.Name = "Unit drawing [1C9]";
Marshal.ReleaseComObject(shape);
((Excel._Worksheet)wb.Sheets[1]).Activate();
wb.SaveAs(
Filename: @"C:\temp\test"+DateTime.Now,
FileFormat: Excel.XlFileFormat.xlOpenXMLWorkbook,
Password: Type.Missing,
WriteResPassword: Type.Missing,
ReadOnlyRecommended: Type.Missing,
CreateBackup: Type.Missing,
AccessMode: Excel.XlSaveAsAccessMode.xlNoChange,
ConflictResolution: Type.Missing,
TextCodepage: Type.Missing,
Local: Type.Missing);
wb.Close();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
protected void InsertStaticIndexSheetsPreWpkTemplate(Excel.Workbook wb)
{
//Insert static sheets in "Innhold-arket" (english: Index sheet).
foreach (Excel.Worksheet ws in wb.Sheets)
if (ws.Name.ToLower() != pageTemplate.ToLower())
InsertIndex(wb, ws.Name, "", "", "", ws.Name);
else
break;
}
public void InsertIndex(Excel.Workbook wb, string sheetName, string lv1, string lv2, string lv3, string linkDescription)
{
Excel.Worksheet indexSheet = (Excel.Worksheet)wb.Sheets[pageContents];
indexSheet.get_Range(string.Format("A{0}", nextIndexNo + firstIndexLine), Type.Missing).Value = nextIndexNo;
indexSheet.get_Range(string.Format("B{0}", nextIndexNo + firstIndexLine), Type.Missing).Value = lv1;
indexSheet.get_Range(string.Format("C{0}", nextIndexNo + firstIndexLine), Type.Missing).Value = lv2;
indexSheet.get_Range(string.Format("D{0}", nextIndexNo + firstIndexLine), Type.Missing).Value = lv3;
Excel.Range linkRange = indexSheet.get_Range(string.Format("E{0}", nextIndexNo + firstIndexLine), Type.Missing);
linkRange.Hyperlinks.Add(linkRange, "", string.Format("'{0}'!A1", sheetName), Type.Missing, linkDescription);
nextIndexNo++;
}
目录结构:
你能帮我解决这个问题吗?