C# 用C语言在面板中嵌入Excel#

C# 用C语言在面板中嵌入Excel#,c#,excel,C#,Excel,我尝试将excel嵌入到我的表单中。有一些问题 我无法选择或编辑任何单元格。 我无法将excel大小与面板大小同步。 我可以在独立运行时删除标题栏,但在面板标题栏出现时删除标题栏。 我无法禁用excel的调整大小属性 以下代码: namespace gomuluExcelDeneme { public partial class Form1 : Form { public Form1() { InitializeCompon

我尝试将excel嵌入到我的表单中。有一些问题

我无法选择或编辑任何单元格。 我无法将excel大小与面板大小同步。 我可以在独立运行时删除标题栏,但在面板标题栏出现时删除标题栏。 我无法禁用excel的调整大小属性

以下代码:

namespace gomuluExcelDeneme
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }


        static Excel.Application xlApp;
        static Excel.Workbook xlWorkbook;
        static Excel.Worksheet xlSheet;
        static object Missing = System.Reflection.Missing.Value;

        [DllImport("user32.dll")]

        static extern IntPtr SetParent(IntPtr child, IntPtr newParent);

        private void button1_Click(object sender, EventArgs e)
        {
            OpenFileDialog file = new OpenFileDialog();
            file.Filter = "Excel Dosyası |*.xlsx";
            file.ShowDialog();
            string filePath = "";
            filePath = file.FileName;

            xlApp = new Excel.Application();
            xlWorkbook = xlApp.Workbooks.Open(filePath);
            xlSheet = (Excel.Worksheet)xlWorkbook.Worksheets.get_Item(1);

            SetParent((IntPtr)xlApp.Hwnd, this.panel1.Handle);
            xlApp.WindowState=Excel.XlWindowState.xlNormal;
            xlApp.Height = panel1.Height-90;
            xlApp.Width = panel1.Width-130;
            xlApp.DisplayStatusBar = false;
            xlApp.ExecuteExcel4Macro("show.toolbar(\"ribbon\",false)");
            xlApp.Visible = true;

        }

        private void panel1_Resize(object sender, EventArgs e)
        {
            xlApp.Height = panel1.Height - 90;
            xlApp.Width = panel1.Width - 130;
        }

        private void Form1_FormClosing(object sender, FormClosingEventArgs e)
        {
            try { xlWorkbook.Close(0); } catch { } 
            xlApp.Quit();
        }
    }
}
截图:

我用DSO成帧器控件解决了这个问题。

如果你的应用是一个容器,OLE可以很容易地做到这一点