现在我遇到这样一个问题,由于客户所装的OFFICE版本不一样,如果调用Excel的COM组件。客户端会提示无法找到“Microsoft.Office.Interop.Excel”。
所以我想请教一下,有没有不通过引用com组件的方式将dataset导入到Excel文件中。我是在winform环境下。
所以我想请教一下,有没有不通过引用com组件的方式将dataset导入到Excel文件中。我是在winform环境下。
解决方案 »
- 求一种用C#后台代码解析Json数据的方法,数据比较复杂
- 请教思路:我初学c#,是不是2.0以上的东西,可以先不学呀,比如linq等的?
- 如何实现上传文件到别的网站并监控进度
- 输入的文本与datagridview所选单元格同步,部分代码已写好!!!
- 求微软企业库4.1(Enterprise Library4.1)中文帮助文档
- 如何获取操作菜单的名称并记录!
- propertygrid控件的处理
- 请问如何把表的某字段的所有行 放到comboBox中 谢谢
- BackgroundWorker组件,实现动态任务百分比.传递给GUI上的进度条控件
- 讨论:用C#实现多线程多页面的IE浏览器(netscaptor)的设计。
- 求C#解析XML字符串代码
- 求 NavigationService.Navigate 的完事示例用法。
网上大部分都是引用Microsoft.Office.Interop.Excel
或者添加COM组件的方式,虽然能实现但是如果客户安装的是其它版本的Excel就报错
看这个帖子把
Type objExcelType = Type.GetTypeFromProgID("Excel.Application");
object objBooks = objApp.GetType().InvokeMember("Workbooks", BindingFlags.GetProperty, null, objApp, null);
....
你再搜一下,有的是。
所以我才想有没有其他的方式
---------------------------------、
public void DataTableToExcel(System.Web.HttpResponse response, DataSet ds, string strDefaultName)
{
const string EXTEND_XLS = "xls";
const string EXTEND_CSV = "csv";
try
{
if (null == ds || ds.Tables.Count < 1)
{
return;
}
if (null == strDefaultName || strDefaultName.Trim().Length < 1)
{
throw new ArgumentException("导出的默认文件名不可为空!");
}
int iDocPos = strDefaultName.LastIndexOf('.'); if (iDocPos <= 0)
{
throw new ArgumentException("导出的默认文件名不正确!");
} iDocPos++; //取得扩展名
string strExtenName = strDefaultName.Substring(iDocPos, strDefaultName.Length - iDocPos); if (strExtenName.Trim().ToLower() != EXTEND_XLS && strExtenName.Trim().ToLower() != EXTEND_CSV)
{
throw new ArgumentException("导出的默认文件的扩展名不正确!");
} //导出的文件的分隔符
string strSplitChar = string.Empty; if (strExtenName.Trim().ToLower() == EXTEND_XLS)
{
strSplitChar = "\t"; }
else if (strExtenName.Trim().ToLower() == EXTEND_CSV)
{
strSplitChar = ",";
}
string data = "";
System.IO.StringWriter sw = new System.IO.StringWriter();
string strTemp = string.Empty;
foreach (DataTable dt in ds.Tables)
{
//输出头
foreach (DataColumn column in dt.Columns)
{
strTemp += column.ColumnName + ",";
} //for (int i = 0; i < dt.Columns.Count; i++)
//{
// if (i != dt.Columns.Count - 1)
// {
// strTemp += dt.Columns[i].ColumnName + strSplitChar;
// }
// else
// {
// strTemp += dt.Columns[i].ColumnName;
// }
//}
sw.WriteLine(strTemp); strTemp = "";
//输出内容
for (int ii = 0; ii < dt.Rows.Count; ii++)
{
for (int j = 0; j < dt.Columns.Count; j++)
{
if (j != dt.Columns.Count - 1)
{
strTemp += dt.Rows[ii][j].ToString() + strSplitChar;
}
else
{
strTemp += dt.Rows[ii][j].ToString();
}
}
sw.WriteLine(strTemp);
strTemp = "";
}
data = "\n\n\n\n";
sw.WriteLine(data); }
sw.Close();
response.Buffer = false;
response.AppendHeader("Content-Disposition", "attachment; filename=" + System.Web.HttpUtility.UrlEncode(strDefaultName, System.Text.Encoding.UTF8));
response.ContentType = "application/ms-excel";
response.ContentEncoding = System.Text.Encoding.GetEncoding("GB2312");
response.Write(sw);
response.Flush();
response.End();
}
catch (Exception ex)
{
throw ex;
}
}
----------------------------------有问题可回复
对直接可以将DataSet转换成Excel输入,绝对强大,非常推荐!!!
上网搜索了一下,采用晚期绑定Excel的方式可以解决Excel版本不同的问题
但有个问题是第一次用时显得很忙,以后就非常快速了,不知道这个问题有什么好的解决方式
QQ:529679044