当前位置:编程学习 > C#/ASP.NET >>

Office打包遇到奇怪的问题。

因为我的电脑装过各种版本的Office。有2003、2007、,现在想打包程序。把相关组件也打包进去,到客户端安装才发现在有个导入导出功能点了也没反应!!
我开发的时候用的是office2003版本,打包这里没显示出来?


寻求解决方法,感谢大家。 --------------------编程问答-------------------- 你使用Visual Studio 是什么版本的呢? --------------------编程问答-------------------- 最好不要用COM方式的office,可用第三方一些组件,不用考虑版本问题。
在引用COM方式组件时,属性里有个选项,可以将此包装内嵌到程序集中的吧 --------------------编程问答--------------------
引用 1 楼 lizhi3186575 的回复:
你使用Visual Studio 是什么版本的呢?


VS2010+Office2003版本的Access,我卸载了又重装Ofice还是找不到组件、 --------------------编程问答--------------------
引用 2 楼 greystar 的回复:
最好不要用COM方式的office,可用第三方一些组件,不用考虑版本问题。
在引用COM方式组件时,属性里有个选项,可以将此包装内嵌到程序集中的吧


可以介绍几个网址吗,最好是有些示例可以看?谢谢 --------------------编程问答--------------------
引用 2 楼 greystar 的回复:
最好不要用COM方式的office,可用第三方一些组件,不用考虑版本问题。
在引用COM方式组件时,属性里有个选项,可以将此包装内嵌到程序集中的吧

那应该是因为VS版本的问题,因为VS2010的模板中针对VSTO4.0的,所以你组件里面只能有Office 2007和Office 2010的组件,如果你要针对Office 2003开发采用VS2005的,还有既然你都安装了Office 2007的话,如果你是开发的外接程序的话,你选择Office 2007组件没关系的,只要你本地安装了Office 2003 ,你程序一样可以部署的 --------------------编程问答--------------------
引用 5 楼 lizhi3186575 的回复:
Quote: 引用 2 楼 greystar 的回复:

最好不要用COM方式的office,可用第三方一些组件,不用考虑版本问题。
在引用COM方式组件时,属性里有个选项,可以将此包装内嵌到程序集中的吧

那应该是因为VS版本的问题,因为VS2010的模板中针对VSTO4.0的,所以你组件里面只能有Office 2007和Office 2010的组件,如果你要针对Office 2003开发采用VS2005的,还有既然你都安装了Office 2007的话,如果你是开发的外接程序的话,你选择Office 2007组件没关系的,只要你本地安装了Office 2003 ,你程序一样可以部署的


发段导出数据到Execl的代码,没有完全装Office2003版本的就导出不了....
#region DataGidView数据到导出excel
        /// <summary>
        /// DataGidView数据到导出excel
        /// </summary>
        /// <param name="fileName">导出Excel文件名</param>
        /// <param name="myDGV">要导出数据的DataGidView</param>
        /// <param name="ds">要导出数据的DataSet</param>
        public void ExportExcel(string fileName, DataGridView myDGV, DataSet ds)
        {
            int insert = 0;
            string saveFileName = "";
            SaveFileDialog saveDialog = new SaveFileDialog();
            saveDialog.DefaultExt = "data";//"xls"; //把后缀名改了
            saveDialog.Filter = "Data文件|*.data";//"Excel文件|*.xls";//把后缀名改了
            saveDialog.FileName = fileName;
            saveDialog.ShowDialog();
            saveFileName = saveDialog.FileName;
            if (saveFileName.IndexOf(":") < 0) return; //被点了取消 
            Microsoft.Office.Interop.Excel.Application xlApp = new Microsoft.Office.Interop.Excel.Application();
            if (xlApp == null)
            {
                MessageBox.Show("无法创建Excel对象,可能你的机器上没有安装Excel!");
                return;
            }

            Microsoft.Office.Interop.Excel.Workbooks workbooks = xlApp.Workbooks;
            Microsoft.Office.Interop.Excel.Workbook workbook = workbooks.Add(Microsoft.Office.Interop.Excel.XlWBATemplate.xlWBATWorksheet);
            Microsoft.Office.Interop.Excel.Worksheet sheet = (Microsoft.Office.Interop.Excel.Worksheet)workbook.ActiveSheet;
            Microsoft.Office.Interop.Excel.Worksheet sheet1 = (Microsoft.Office.Interop.Excel.Worksheet)workbook.ActiveSheet;

            // string ss = "";

            for (int k = 1; k < 2; k++)
            {
                Microsoft.Office.Interop.Excel.Sheets xlSheets = workbook.Sheets as Microsoft.Office.Interop.Excel.Sheets;
                // 添加 Sheet   
                sheet = (Microsoft.Office.Interop.Excel.Worksheet)xlSheets.Add(xlSheets[1], Type.Missing, Type.Missing, Type.Missing);
                sheet.Name = "色调";
                sheet1.Name = "色母";

                //写入标题
                for (int i = 0; i < myDGV.ColumnCount; i++)
                {
                    sheet.Cells[1, i + 1] = myDGV.Columns[i].HeaderText;
                }
                progressBar1.Value = 0;//默认值
                progressBar1.Maximum = myDGV.Rows.Count;//自己更改最大值
                //写入数据
                for (int r = 0; r < myDGV.Rows.Count; r++)
                {
                    for (int i = 0; i < myDGV.ColumnCount; i++)
                    {
                        //加上 "'" 英文单引号,可以保留导出前的状态。比如01、3E5,如果不加上,EXECL数据就会自动转义。
                        sheet.Cells[r + 2, i + 1] = "'" + myDGV.Rows[r].Cells[i].Value;
                        //ss = ss+"," + myDGV.Rows[r].Cells[0].Value;
                    }
                    insert++;
                    //添加你的代码
                    progressBar1.Value = r;
                    System.Windows.Forms.Application.DoEvents();
                }
                sheet.Columns.EntireColumn.AutoFit();//列宽自适应

                //第二个表写入标题
                for (int i = 0; i < ds.Tables[0].Columns.Count; i++)
                {
                    sheet1.Cells[1, i + 1] = ds.Tables[0].Columns[i].ColumnName;
                }
                //第二个表写入数据
                for (int r = 0; r < ds.Tables[0].Rows.Count; r++)
                {
                    for (int i = 0; i < ds.Tables[0].Columns.Count; i++)
                    {
                        sheet1.Cells[r + 2, i + 1] = "'" + ds.Tables[0].Rows[r][i].ToString();
                        //ss = ss + "," + ds.Tables[0].Rows[r][i].ToString();
                    }
                    System.Windows.Forms.Application.DoEvents();
                }
                sheet1.Columns.EntireColumn.AutoFit();//列宽自适应
            }
            if (saveFileName != "")
            {
                try
                {
                    workbook.Saved = true;
                    workbook.SaveCopyAs(saveFileName);
                }
                catch (Exception ex)
                {
                    MessageBox.Show("导出文件时出错,文件可能正被打开!\n" + ex.Message);
                    return;
                }
            }
            xlApp.Quit();
            GC.Collect();//强行销毁 
            //MessageBox.Show(fileName + "文件导出成功!共导出:" + insert + " 条数据。在:" + saveDialog.FileName, "提示", MessageBoxButtons.OK);

            // MessageBox.Show(ss , "导出", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);

            MessageBox.Show(fileName + "文件导出成功!共导出:" + insert + " 条数据。在:" + saveDialog.FileName, "导出", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
            progressBar1.Value = 0;//进度条变恢复原样
        }
        #endregion

这样写有些机器就没反应了?各位前辈救救俺吧。 --------------------编程问答-------------------- 你的Debug的时候可以完全导出吗? 你直接可以用VS2010 的Publish选项来创建安装包试试的,你需要你右键项目点发布,然后再指定发布的位置就可以的,对于具体创建安装包的步骤见下面链接(如果你在VS调试的时候可以导出成功的话,应该就是创建安装包的时候出错了):
http://www.cnblogs.com/xtsjh/archive/2012/02/23/2364593.html
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,