首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 媒体动画 > CAD教程 >

关于silverlight DataGrid导出Excel,该如何处理

2012-09-06 
关于silverlight DataGrid导出Excel代码是从网上找的,网上有关datagrid导出excel的文章有很多,估计大家都

关于silverlight DataGrid导出Excel
代码是从网上找的,网上有关datagrid导出excel的文章有很多,估计大家都很熟悉,
代码运行到下面这句时出了异常:

dynamic excel = AutomationFactory.CreateObject("Excel.Application");

异常如下:

用户代码未处理 System.NotSupportedException
  Message=此操作在当前上下文中不受支持。
  StackTrace:
  位于 MS.Internal.Error.MarshalXresultAsException(UInt32 hr, COMExceptionBehavior comExceptionBehavior)
  位于 MS.Internal.XcpImports.CheckHResult(UInt32 hr)
  位于 MS.Internal.ComAutomation.ComAutomationNative.CreateObject(String progID, IntPtr& nativeObject)
  位于 MS.Internal.ComAutomation.ComAutomationServices.CreateObject(String progID, ComAutomationParamWrapService paramWrapService)
  位于 System.Runtime.InteropServices.Automation.AutomationFactory.CreateObject(String progID)
  位于 ExportToExcelTools.ExportManager.ExportToExcel(Object[,] data)
  位于 ExportToExcelTools.DataGridExcelTools.StartExport(Object data)
  位于 System.Threading.ThreadHelper.ThreadStart_Context(Object state)
  位于 System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean ignoreSyncCtx)
  位于 System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
  位于 System.Threading.ThreadHelper.ThreadStart(Object obj)
  InnerException: 


[解决办法]
这个只能在浏览器外运行(Out Of Browser , OOB),并且要提升权限。

并且,在后续的代码中一般都会使用到 Excel 的属性或方法,这就要求使用 DLR ,
要添加 Microsoft.CSharp.dll 这个程序集的引用


下面的例子在 OOB 的环境下创建一个 Word 文档

C# code
dynamic word;private void btnRunWord_Click(object sender, RoutedEventArgs e){    if (!App.Current.HasElevatedPermissions)    {        return;    }    bool hasInitialed = false;    try    {        try        {            // 尝试获取进程            word = System.Runtime.InteropServices.Automation.AutomationFactory.GetObject("Word.Application");            hasInitialed = true;        }        catch (Exception)        {            // 进程不存在,新创建进程            word = System.Runtime.InteropServices.Automation.AutomationFactory.CreateObject("Word.Application");            hasInitialed = true;        }        if (hasInitialed)        {            // 要使用 DLR ,就要添加 Microsoft.CSharp 这个命名空间的引用            string myDocuments = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);            string path = System.IO.Path.Combine(myDocuments, this.textBox1.Text);            if (System.IO.File.Exists(path))            {                word.Documents.Open(path);            }            else            {                // 新建空文档                word.Documents.Add();            }            word.ActiveWindow.WindowState = 1;            //word.Selection.Paste();            //word.Quit();         }    }    catch (Exception ex)    {        MessageBox.Show(ex.ToString());    }} 

热点排行