Office打包遇到奇怪的问题。
因为我的电脑装过各种版本的Office。有2003、2007、,现在想打包程序。把相关组件也打包进去,到客户端安装才发现在有个导入导出功能点了也没反应!!我开发的时候用的是office2003版本,打包这里没显示出来?
寻求解决方法,感谢大家。 --------------------编程问答-------------------- 你使用Visual Studio 是什么版本的呢? --------------------编程问答-------------------- 最好不要用COM方式的office,可用第三方一些组件,不用考虑版本问题。
在引用COM方式组件时,属性里有个选项,可以将此包装内嵌到程序集中的吧 --------------------编程问答--------------------
VS2010+Office2003版本的Access,我卸载了又重装Ofice还是找不到组件、 --------------------编程问答--------------------
可以介绍几个网址吗,最好是有些示例可以看?谢谢 --------------------编程问答--------------------
那应该是因为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#