精华内容
下载资源
问答
  • 网上比较多讲述如何操作Excel表的文章,但都是启动Excel的窗口来打开Excel数据文件。有时候需要把Excel嵌入到自己程序的Form,给客户一个不用切换窗口的操作界面,似乎更好。这VC中用OLE技术很容易实现,但是...

                                 
     网上比较多讲述如何操作Excel表的文章,但都是启动Excel的窗口来打开Excel数据文件。有时候需要把Excel表嵌入到自己程序的Form中,给客户一个不用切换窗口的操作界面,似乎更好。这在VC中用OLE技术很容易实现,但是在C#中方法就不一样啦。下面将就此进行阐述。

    一、首先简要回顾一下如何操作Excel表

      先要添加对Excel的引用。选择项目-〉添加引用-〉COM-〉添加Microsoft Excel 9.0。(不同的office讲会有不同版本的dll文件)。
       using Excel;
       using System.Reflection;
      
       //产生一个Excel.Application的新进程
       Excel.Application app = new Excel.Application();
       if (app == null)
       {
        statusBar1.Text = "ERROR: EXCEL couldn't be started!";
        return ;
       }
      
       app.Visible = true; //如果只想用程序控制该excel而不想让用户操作时候,可以设置为false
       app.UserControl = true;
      
       Workbooks workbooks =app.Workbooks;
     
       _Workbook workbook = workbooks.Add(XlWBATemplate.xlWBATWorksheet); //根据模板产生新的workbook
    //  _Workbook workbook = workbooks.Add("c:\\a.xls"); //或者根据绝对路径打开工作簿文件a.xls

       Sheets sheets = workbook.Worksheets;
       _Worksheet worksheet = (_Worksheet) sheets.get_Item(1);
       if (worksheet == null)
       {
        statusBar1.Text =  "ERROR: worksheet == null";
        return;
       }

       // This paragraph puts the value 5 to the cell G1
       Range range1 = worksheet.get_Range("A1", Missing.Value);
       if (range1 == null)
       {
        statusBar1.Text =  "ERROR: range == null";
        return;
       }
       const int nCells = 2345;
       range1.Value2 = nCells;
     
    二、将Excel用户界面嵌入到自己的Windows Form中

          由于目前,C#和vb.net都不支持OLE技术(参见微软支持中心Info:304562),,所以只有使用WebBrowser控件来完成此功能。(以下方法参见微软支持中心Howto:304662)
          1、右击工具箱,选择自定义工具箱,添加COM组件,选择“Microsoft Web 浏览器”(对应文件是\winnt\system32\shdocvw.dll),确定。在工具箱中将会出现文本为Explorer的WebBroser控件图标。
          2、在Form1中添加WebBrowser控件。(对象名却省是axWebBrowser1)
          3、假定要打开的excel文件是: c:\a.xls。
           string strFileName = @"c:\a.xls";
         Object refmissing = System.Reflection.Missing.Value;
         axWebBrowser1.Navigate(strFileName, ref refmissing , ref refmissing , ref refmissing , ref refmissing);
        值得注意的是用WebBrowser控件不支持菜单合并,也就是说无法把Excel表的菜单带入到我们的程序中。这是相对于OLE实现方法的一大缺点。幸好提供了可以把工具栏添加进来的功能,通过工具栏可以进行许多Excel专有的操作。
         //下面这句可以将excel本身的工具调添加进来
        axWebBrowser1.ExecWB(SHDocVw.OLECMDID.OLECMDID_HIDETOOLBARS, SHDocVw.OLECMDEXECOPT.OLECMDEXECOPT_DONTPROMPTUSER,ref refmissing , ref refmissing);
       
    三、回到本文提出的问题,如何操作嵌入的Excel?

       首先需要明白,用WebBrowser“装载”Excel"表,实际上仍然是在新的进程空间中运行Excel.exe。可以用任务管理器观察。因此,只要我们能够获取Excel.Application对象,就能像上文一中所说的那样操作Excel数据。
       幸好可以通过WebBrowser的方法NavigateComplete提供的事件参数e来访问Excel.Application。
      public void axWebBrowser1_NavigateComplete2(object sender, AxSHDocVw.DWebBrowserEvents2_NavigateComplete2Event e)
      {
       Object o = e.pDisp;
       Object oDocument = o.GetType().InvokeMember("Document",BindingFlags.GetProperty,null,o,null);
       Object oApplication = o.GetType().InvokeMember("Application",BindingFlags.GetProperty,null,oDocument,null);
          //Object oName = o.GetType().InvokeMember("Name",BindingFlags.GetProperty ,null,oApplication,null);

       //由于打开的是excel文件,所以这里的oApplication 其实就是Excel.Application
       Excel.Application eApp =(Excel.Application)oApplication;//这样就可以象上文中所述来操作Excel了。
      }

    四、包含该WebBrowser的Form退出时候,如何确保Excel进程也退出?(参见Microsoft帮助中心KB317109)

      由于WebBrowser只不过是对Excel表的浏览,而Excel在单独的进程中运行。所以要保证对该Excel对象eApp及其相应的所有成员变量都释放引用,才能保证在Form退出时excel进程跟着退出。这一点在一个程序需要多次打开关闭excel表时尤为重要。
          Excel.Application oApp;
          Excel.Workbooks oBooks;
          Excel.Workbook oBook;
          Excel.Worksheet oSheet;
          ...........
        private void ExcelExit()
        {
           NAR(oSheet);
           oBook.Close(False);
           NAR(oBook);
           NAR(oBooks);
           oApp.Quit();
           NAR(oApp);

           Debug.WriteLine("Sleeping...");
           System.Threading.Thread.Sleep(5000);
           Debug.WriteLine("End Excel");
        }
      private void NAR(Object o)
      {
            try{System.Runtime.InteropServices.Marshal.ReleaseComObject(o);}
            catch{}
            finally{o = null;}
        }
      经过试验,我发现除了释放这些变量以外,必须把该axWebBroswer1也销毁掉,Excel进程才退出。否则的话,即使让axWebBroser1去Navigate空内容"about:blank", excel进程仍然不会退出。因此应该将axWebBroser1所在的Form关闭掉,或者直接调用axWebBrowser1.Dispose();
      如果还是其它问题导致不能正常退出,就只有调用垃圾回收了。
      GC.Collect();

    转载于:https://www.cnblogs.com/kangtr/archive/2005/09/06/231009.html

    展开全文
  • 使用Microsoft Excel整理和分析数据是一件十分枯燥的事情,...在Powerpoint中插入音乐是一件很简单的事情,那如何在Microsoft Excel中插入音乐呢?第一步:启用开发工具首先需要启用自定义功能区中的“开发工具”...

    c9adb12987b276b21958724ef8d11b8b.png

    使用Microsoft Excel整理和分析数据是一件十分枯燥的事情,如何赋予自己Excel工作簿灵魂呢?在整理数据的时候能够放松心情,让其他用户在查看和使用Excel时充满韵味。

    可以通过一些手段给枯燥的Excel数据添加上动听的音乐。在Powerpoint中插入音乐是一件很简单的事情,那如何在Microsoft Excel中插入音乐呢?

    0d6c643bf8756d3cc214315b6acd5c07.png
    • 第一步:启用开发工具

    首先需要启用自定义功能区中的“开发工具”,不知道如何启用的小伙伴请继续向下看,已经启用的可以跳过此步骤。

    在“文件”选项卡中,点击“选项”。在Excel选项窗口中,点击左侧“自定义功能区”,在右侧自定义功能区中点击“开发工具”前的小方格,设置完成后点击确定按钮保存设置。

    这时在菜单栏中会多出一个“开发工具”选项卡。

    b2a90346a10d9f22e3a42f72003fc459.gif
    • 第二步:转换音频格式

    我们需要将Mp3格式的音频文件转换为Swf格式,有关此类文件类型转换的工具有很多,请根据自身需要进行下载安装。

    此处使用的是MP3 to SWF Converter转换工具,如有需要请在下方留言获取链接。

    aaad9abb75f0977e2c1ca46a92727d2a.png
    • 第三步:添加控件

    在“开发工具”选项卡中,点击“控件”功能区中的“插入”,选中下拉菜单中的“其他控件”。

    在其他控件窗口中,找到并双击“Shockwave Flash Object”控件。此时鼠标指针会变成“+”,在工作表中的任意区域绘制一个大小合适的矩形。

    ed42999c074a4d6ff08493b90c86d92f.png
    • 第四步:编辑控件属性

    右键单击刚刚插入的控件,选中右键菜单中的“属性”。在属性窗口中的Movie中输入Swf文件的存储路径“C:素材1.swf”。如果弹出警告窗口,选择“我可以识别此内容。允许播放。”

    将EmbedMovie属性设置为True,是将Swf文件嵌入到Microsoft Excel工作簿中,这样就可以在其他计算机上也可以正常播放。即使删除Swf文件对Excel工作簿也没有任何影响。

    将Loop属性值设置为True,表示音频文件可以循环播放。

    属性设置完成后,点击退出属性窗口。点击控件功能区中的“设计模式”即可播放音乐。此时在Excel工作表界面上出现三个按钮,可以控制音乐的播放、暂停、停止。

    23c7ad9fd00a3bc36b0a9ce053735be5.png

    今天的分享到此结束,如果需要更换音频文件或者进行其他设置,只需点击控件功能区中的“设计模式”,即可对控件进行再次编辑。Microsoft Excel通过嵌入的方式插入音频也有弊端,就是Excel文件的大小会比较大,请谨慎操作。也可以通过改变音频文件的比特率调节音质,从而让音频文件变小。

    知识改变命运,科技成就未来。如果您有什么好的建议或意见,请在下方留言告诉我们,感谢您的支持。

    展开全文
  • C#如何在Form中嵌入并且操作Excel表格 网上比较多讲述如何操作Excel表的文章,但都是启动Excel的窗口来打开Excel数据文件。有时候需要把Excel表嵌入到自己程序的Form中,给客户一个不用切换窗口的操作界面,似乎更好...
    C#如何在Form中嵌入并且操作Excel表格 

    网上比较多讲述如何操作Excel表的文章,但都是启动Excel的窗口来打开Excel数据文件。有时候需要把Excel表嵌入到自己程序的Form中,给客户一个不用切换窗口的操作界面,似乎更好。这在VC中用OLE技术很容易实现,但是在C#中方法就不一样啦。下面将就此进行阐述。
    一、首先简要回顾一下如何操作Excel表
    先要添加对Excel的引用。选择项目-〉添加引用-〉COM-〉添加Microsoft Excel 9.0。(不同的office讲会有不同版本的dll文件)。
    using Excel;
    using System.Reflection;

    //产生一个Excel.Application的新进程
    Excel.Application app = new Excel.Application();
    if (app == null)
    {
    statusBar1.Text = "ERROR: EXCEL couldn????t be started!";
    return ;
    }

    app.Visible = true; //如果只想用程序控制该excel而不想让用户操作时候,可以设置为false
    app.UserControl = true;

    Workbooks workbooks =app.Workbooks;

    _Workbook workbook = workbooks.Add(XlWBATemplate.xlWBATWorksheet); //根据模板产生新的workbook
    // _Workbook workbook = workbooks.Add("c://a.xls"); //或者根据绝对路径打开工作簿文件a.xls
    Sheets sheets = workbook.Worksheets;
    _Worksheet worksheet = (_Worksheet) sheets.get_Item(1);
    if (worksheet == null)
    {
    statusBar1.Text = "ERROR: worksheet == null";
    return;
    }
    // This paragraph puts the value 5 to the cell G1
    Range range1 = worksheet.get_Range("A1", Missing.Value);
    if (range1 == null)
    {
    statusBar1.Text = "ERROR: range == null";
    return;
    }
    const int nCells = 2345;
    range1.Value2 = nCells;

    二、将Excel用户界面嵌入到自己的Windows Form中
    由于目前,C#和vb.net都不支持OLE技术(参见微软支持中心Info:304562),,所以只有使用WebBrowser控件来完成此功能。(以下方法参见微软支持中心Howto:304662)
    1、右击工具箱,选择自定义工具箱,添加COM组件,选择“Microsoft Web 浏览器”(对应文件是/winnt/system32/shdocvw.dll),确定。在工具箱中将会出现文本为Explorer的WebBroser控件图标。
    2、在Form1中添加WebBrowser控件。(对象名却省是axWebBrowser1)
    3、假定要打开的excel文件是: c:/a.xls。
    string strFileName = @"c:/a.xls";
    Object refmissing = System.Reflection.Missing.Value;
    axWebBrowser1.Navigate(strFileName, ref refmissing , ref refmissing , ref refmissing , ref refmissing);
    值得注意的是用WebBrowser控件不支持菜单合并,也就是说无法把Excel表的菜单带入到我们的程序中。这是相对于OLE实现方法的一大缺点。幸好提供了可以把工具栏添加进来的功能,通过工具栏可以进行许多Excel专有的操作。
    //下面这句可以将excel本身的工具调添加进来
    axWebBrowser1.ExecWB(SHDocVw.OLECMDID.OLECMDID_HIDETOOLBARS, SHDocVw.OLECMDEXECOPT.OLECMDEXECOPT_DONTPROMPTUSER,ref refmissing , ref refmissing);

    三、回到本文提出的问题,如何操作嵌入的Excel?
    首先需要明白,用WebBrowser“装载”Excel"表,实际上仍然是在新的进程空间中运行Excel.exe。可以用任务管理器观察。因此,只要我们能够获取Excel.Application对象,就能像上文一中所说的那样操作Excel数据。
    幸好可以通过WebBrowser的方法NavigateComplete提供的事件参数e来访问Excel.Application。
    public void axWebBrowser1_NavigateComplete2(object sender, AxSHDocVw.DWebBrowserEvents2_NavigateComplete2Event e)
    {
    Object o = e.pDisp;
    Object oDocument = o.GetType().InvokeMember("Document",BindingFlags.GetProperty,null,o,null);
    Object oApplication = o.GetType().InvokeMember("Application",BindingFlags.GetProperty,null,oDocument,null);
    //Object oName = o.GetType().InvokeMember("Name",BindingFlags.GetProperty ,null,oApplication,null);
    //由于打开的是excel文件,所以这里的oApplication 其实就是Excel.Application
    Excel.Application eApp =(Excel.Application)oApplication;//这样就可以象上文中所述来操作Excel了。
    }
    四、包含该WebBrowser的Form退出时候,如何确保Excel进程也退出?(参见Microsoft帮助中心KB317109)
    由于WebBrowser只不过是对Excel表的浏览,而Excel在单独的进程中运行。所以要保证对该Excel对象eApp及其相应的所有成员变量都释放引用,才能保证在Form退出时excel进程跟着退出。这一点在一个程序需要多次打开关闭excel表时尤为重要。
    Excel.Application oApp;
    Excel.Workbooks oBooks;
    Excel.Workbook oBook;
    Excel.Worksheet oSheet;
    ...........
    private void ExcelExit()
    {
    NAR(oSheet);
    oBook.Close(False);
    NAR(oBook);
    NAR(oBooks);
    oApp.Quit();
    NAR(oApp);
    Debug.WriteLine("Sleeping...");
    System.Threading.Thread.Sleep(5000);
    Debug.WriteLine("End Excel");
    }
    private void NAR(Object o)
    {
    try{System.Runtime.InteropServices.Marshal.ReleaseComObject(o);}
    catch{}
    finally{o = null;}
    }
    经过试验,我发现除了释放这些变量以外,必须把该axWebBroswer1也销毁掉,Excel进程才退出。否则的话,即使让axWebBroser1去Navigate空内容"about:blank", excel进程仍然不会退出。因此应该将axWebBroser1所在的Form关闭掉,或者直接调用axWebBrowser1.Dispose();
    如果还是其它问题导致不能正常退出,就只有调用垃圾回收了。
    GC.Collect();

    本文转自
    http://www.cnblogs.com/hermes262/archive/2006/04/30/389611.html
    展开全文
  • 网上比较多讲述如何操作Excel表的文章,但都是启动Excel的窗口来打开Excel数据文件。有时候需要把Excel嵌入到自己程序的Form,给客户一个不用切换窗口的操作界面,似乎更好。这VC中用OLE技术很容易实现,但是...
       网上比较多讲述如何操作Excel表的文章,但都是启动Excel的窗口来打开Excel数据文件。有时候需要把Excel表嵌入到自己程序的Form中,给客户一个不用切换窗口的操作界面,似乎更好。这在VC中用OLE技术很容易实现,但是在C#中方法就不一样啦。下面将就此进行阐述。

    一、首先简要回顾一下如何操作Excel表

      先要添加对Excel的引用。选择项目-〉添加引用-〉COM-〉添加Microsoft Excel 9.0。(不同的office讲会有不同版本的dll文件)。
       using Excel;
       using System.Reflection;
       
       //产生一个Excel.Application的新进程
       Excel.Application app = new Excel.Application();
       if (app == null)
       {
        statusBar1.Text = "ERROR: EXCEL couldn't be started!";
        return ;
       }
       
       app.Visible = true; //如果只想用程序控制该excel而不想让用户操作时候,可以设置为false
       app.UserControl = true;
       
       Workbooks workbooks =app.Workbooks;
      
       _Workbook workbook = workbooks.Add(XlWBATemplate.xlWBATWorksheet); //根据模板产生新的workbook
    //  _Workbook workbook = workbooks.Add("c://a.xls"); //或者根据绝对路径打开工作簿文件a.xls

       Sheets sheets = workbook.Worksheets;
       _Worksheet worksheet = (_Worksheet) sheets.get_Item(1);
       if (worksheet == null)
       {
        statusBar1.Text =  "ERROR: worksheet == null";
        return;
       }

       // This paragraph puts the value 5 to the cell G1
       Range range1 = worksheet.get_Range("A1", Missing.Value);
       if (range1 == null)
       {
        statusBar1.Text =  "ERROR: range == null";
        return;
       }
       const int nCells = 2345;
       range1.Value2 = nCells;
      
    二、将Excel用户界面嵌入到自己的Windows Form中

          由于目前,C#和vb.net都不支持OLE技术(参见微软支持中心Info:304562),,所以只有使用WebBrowser控件来完成此功能。(以下方法参见微软支持中心Howto:304662)
          1、右击工具箱,选择自定义工具箱,添加COM组件,选择“Microsoft Web 浏览器”(对应文件是/winnt/system32/shdocvw.dll),确定。在工具箱中将会出现文本为Explorer的WebBroser控件图标。
          2、在Form1中添加WebBrowser控件。(对象名却省是axWebBrowser1)
          3、假定要打开的excel文件是: c:/a.xls。
           string strFileName = @"c:/a.xls";
         Object refmissing = System.Reflection.Missing.Value;
         axWebBrowser1.Navigate(strFileName, ref refmissing , ref refmissing , ref refmissing , ref refmissing);
        值得注意的是用WebBrowser控件不支持菜单合并,也就是说无法把Excel表的菜单带入到我们的程序中。这是相对于OLE实现方法的一大缺点。幸好提供了可以把工具栏添加进来的功能,通过工具栏可以进行许多Excel专有的操作。
         //下面这句可以将excel本身的工具调添加进来
        axWebBrowser1.ExecWB(SHDocVw.OLECMDID.OLECMDID_HIDETOOLBARS, SHDocVw.OLECMDEXECOPT.OLECMDEXECOPT_DONTPROMPTUSER,ref refmissing , ref refmissing);
        
    三、回到本文提出的问题,如何操作嵌入的Excel?

       首先需要明白,用WebBrowser“装载”Excel"表,实际上仍然是在新的进程空间中运行Excel.exe。可以用任务管理器观察。因此,只要我们能够获取Excel.Application对象,就能像上文一中所说的那样操作Excel数据。
       幸好可以通过WebBrowser的方法NavigateComplete提供的事件参数e来访问Excel.Application。
      public void axWebBrowser1_NavigateComplete2(object sender, AxSHDocVw.DWebBrowserEvents2_NavigateComplete2Event e)
      {
       Object o = e.pDisp;
       Object oDocument = o.GetType().InvokeMember("Document",BindingFlags.GetProperty,null,o,null);
       Object oApplication = o.GetType().InvokeMember("Application",BindingFlags.GetProperty,null,oDocument,null);
          //Object oName = o.GetType().InvokeMember("Name",BindingFlags.GetProperty ,null,oApplication,null);

       //由于打开的是excel文件,所以这里的oApplication 其实就是Excel.Application
       Excel.Application eApp =(Excel.Application)oApplication;//这样就可以象上文中所述来操作Excel了。
      }

    四、包含该WebBrowser的Form退出时候,如何确保Excel进程也退出?(参见Microsoft帮助中心KB317109)

      由于WebBrowser只不过是对Excel表的浏览,而Excel在单独的进程中运行。所以要保证对该Excel对象eApp及其相应的所有成员变量都释放引用,才能保证在Form退出时excel进程跟着退出。这一点在一个程序需要多次打开关闭excel表时尤为重要。
          Excel.Application oApp;
          Excel.Workbooks oBooks;
          Excel.Workbook oBook;
          Excel.Worksheet oSheet;
          ...........
        private void ExcelExit()
        {
           NAR(oSheet);
           oBook.Close(False);
           NAR(oBook);
           NAR(oBooks);
           oApp.Quit();
           NAR(oApp);

           Debug.WriteLine("Sleeping...");
           System.Threading.Thread.Sleep(5000);
           Debug.WriteLine("End Excel");
        }
      private void NAR(Object o)
      {
            try{System.Runtime.InteropServices.Marshal.ReleaseComObject(o);}
            catch{}
            finally{o = null;}
        }
      经过试验,我发现除了释放这些变量以外,必须把该axWebBroswer1也销毁掉,Excel进程才退出。否则的话,即使让axWebBroser1去Navigate空内容"about:blank", excel进程仍然不会退出。因此应该将axWebBroser1所在的Form关闭掉,或者直接调用axWebBrowser1.Dispose();
      如果还是其它问题导致不能正常退出,就只有调用垃圾回收了。
      GC.Collect();

    转载于:https://www.cnblogs.com/Ruiky/archive/2012/06/12/2546289.html

    展开全文
  • C#如何在Form中嵌入并且操作Excel表格 - - 网上比较多讲述如何操作Excel表的文章,但都是启动Excel的窗口来打开Excel数据文件。有时候需要把Excel表嵌入到自己程序的Form中,给客户一个不用切换窗口的操作界面,...
  • (内容转自http://www.cnblogs.com/sunrack/articles/1157679.html)网上比较多讲述如何操作excel表的文章,但都是启动excel的窗口来打开excel数据文件。有时候需要把excel嵌入到自己程序的form,给客户一个不用...

空空如也

空空如也

1 2 3 4 5
收藏数 90
精华内容 36
关键字:

如何在excel中嵌入文件