c# 将DataSet 导入到Excel文件中 现在我遇到这样一个问题,由于客户所装的OFFICE版本不一样,如果调用Excel的COM组件。客户端会提示无法找到“Microsoft.Office.Interop.Excel”。 所以我想请教一下,有没有不通过引用com组件的方式将dataset导入到Excel文件中。我是在winform环境下。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 ExcelLibrary, 直接输出 BIFF8 格式的 Execel 文档。下载地址: http://code.google.com/p/excellibrary/downloads/list 有没有具体的实现方式或者参考文件啊网上大部分都是引用Microsoft.Office.Interop.Excel或者添加COM组件的方式,虽然能实现但是如果客户安装的是其它版本的Excel就报错 http://topic.csdn.net/u/20100112/08/67e4c827-62b4-48e2-8b55-b1335f6d6d4f.html看这个帖子把 可以不引用就操作Excel;参考:Type objExcelType = Type.GetTypeFromProgID("Excel.Application");object objBooks = objApp.GetType().InvokeMember("Workbooks", BindingFlags.GetProperty, null, objApp, null);....你再搜一下,有的是。 7楼提供的资料我已经看过了,我之前也是这么处理的,但是客户端装的Excel的版本不同,所以有些地方会提示无法找到“Microsoft.Office.Interop.Excel”所以我才想有没有其他的方式 hbxtlhx说的对 我也是用这种办法 给你代码参考参考吧。---------------------------------、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; } }----------------------------------有问题可回复 用org.in2bits.MyXls.dll对直接可以将DataSet转换成Excel输入,绝对强大,非常推荐!!! 问题已经解决了,非常感谢hbxtlhx提供的资料上网搜索了一下,采用晚期绑定Excel的方式可以解决Excel版本不同的问题但有个问题是第一次用时显得很忙,以后就非常快速了,不知道这个问题有什么好的解决方式 我有高速且稳定 又不用 COM的方法 需要的请联系 免费QQ:529679044 winfrom程序安装后不能运行 vs2005 treeview 控件能自动根据XML文件,生成节点吗? 大家帮我看看用label显示数据库最后一行哪里出了问题 推荐一树控件 关于排序的问题 一个关于文件路径的小问题: 如何得到winform应用程序的中径. 开新贴求助,急!!!编译好的exe再在其他机器上运行登录SQL Server2000 出现异常错误! 请问怎样知道调用的线程已经结束。 如何在datagrid的单元格里放置combobox? 如何实现控件的拖动效果? 求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