0

我正在尝试使用形状对象在 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++;
    }

目录结构:

在此处输入图像描述

在此处输入图像描述

你能帮我解决这个问题吗?

4

0 回答 0