AxFramerControl打开EXCEL后,程序外部的EXCEL无法编辑的问题
private AxDSOFramer.AxFramerControl axf_Excel = new AxDSOFramer.AxFramerControl();不要把控件直接拖到窗体上,而是使用代码New出来,然后:
Thread thOpen ;
private void ExcelCtrlEx_Load(object sender, EventArgs e)
{
thOpen = new Thread(new ThreadStart(FOpen));
((System.ComponentModel.ISupportInitialize)(this.axf_Excel)).BeginInit();
axf_Excel.Dock = System.Windows.Forms.DockStyle.Fill;
axf_Excel.Enabled = true;
axf_Excel.Location = new System.Drawing.Point(0, 0);
this.spc_Excel.Name = "spc_Excel";
spc_Excel.Panel1.Controls.Add(axf_Excel);
axf_Excel.Titlebar = false;
axf_Excel.Menubar = false;
axf_Excel.Toolbars = true;
((System.ComponentModel.ISupportInitialize)(this.axf_Excel)).EndInit();
//启动现成加载EXCEL
thOpen.Start();
}
private void FOpen()
{
lock (axf_Excel)
{
try
{
axf_Excel.Open(m_strPagePathName, false, "Excel.Sheet", "", "");
xBook = (Workbook)axf_Excel.ActiveDocument;
// xSheet = (xBook.Worksheets[1]);
xSheet = (Worksheet)xBook.ActiveSheet;
}
catch (System.Exception ex)
{
MessageBox.Show(ex.Message.ToString());
}
}
}
要点:1、直接使用代码加载,加载的只能是UserControl,或是只要显示的FORM,如果要是在FORM中嵌套FROM,则比被嵌套的FORM就必须设置显示层次,且必须要设置能为非顶级,如果设置为非顶级,着也会出现外部EXCEL无法编辑的情况
2、加载的时候,使用异步线程加载,如果不使用,在打开多个时候,会有问题
3、在做保存等操作的时候,使用委托异步操作。例如:
MethodInvoker In = new MethodInvoker(SaveOnePage);
this.BeginInvoke(In);
private void SaveOnePage()
{
try
{
axf_Excel.Save();
}
catch (System.Exception ex)
{
MessageBox.Show(ex.Message.ToString());
}
}
补充:.NET技术 , 组件/控件开发