c# 将DataSet 导入到Excel文件中

jsnjlhb 2010-01-16 09:27:11
现在我遇到这样一个问题,由于客户所装的OFFICE版本不一样,如果调用Excel的COM组件。客户端会提示无法找到“Microsoft.Office.Interop.Excel”。
所以我想请教一下,有没有不通过引用com组件的方式将dataset导入到Excel文件中。我是在winform环境下。
...全文
241 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
minghua_y 2010-06-28
  • 打赏
  • 举报
回复
我有高速且稳定 又不用 COM的方法 需要的请联系 免费
QQ:529679044
yang_road 2010-01-18
  • 打赏
  • 举报
回复
用org.in2bits.MyXls.dll
对直接可以将DataSet转换成Excel输入,绝对强大,非常推荐!!!
段传涛 2010-01-18
  • 打赏
  • 举报
回复
给你代码参考参考吧。
---------------------------------、
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;
}
}
----------------------------------有问题可回复
Lee 2010-01-18
  • 打赏
  • 举报
回复
hbxtlhx

说的对 我也是用这种办法
jsnjlhb 2010-01-18
  • 打赏
  • 举报
回复
7楼提供的资料我已经看过了,我之前也是这么处理的,但是客户端装的Excel的版本不同,所以有些地方会提示无法找到“Microsoft.Office.Interop.Excel”
所以我才想有没有其他的方式
北京的雾霾天 2010-01-18
  • 打赏
  • 举报
回复
要找不到了我给你一个,还是高速的。
北京的雾霾天 2010-01-18
  • 打赏
  • 举报
回复
可以不引用就操作Excel;参考:
Type objExcelType = Type.GetTypeFromProgID("Excel.Application");
object objBooks = objApp.GetType().InvokeMember("Workbooks", BindingFlags.GetProperty, null, objApp, null);
....
你再搜一下,有的是。
jsnjlhb 2010-01-18
  • 打赏
  • 举报
回复
高手是不是觉得分数不够啊,我再加分
我查了一些资料,有人提出用文本流的方式,希望能高手能帮忙提供一个方案或者资料
jsnjlhb 2010-01-18
  • 打赏
  • 举报
回复
问题已经解决了,非常感谢hbxtlhx提供的资料
上网搜索了一下,采用晚期绑定Excel的方式可以解决Excel版本不同的问题
但有个问题是第一次用时显得很忙,以后就非常快速了,不知道这个问题有什么好的解决方式
jsnjlhb 2010-01-17
  • 打赏
  • 举报
回复
怎么没高手帮忙解答一下啊
wuyq11 2010-01-16
  • 打赏
  • 举报
回复
使用报表控件生产报表
或在服务器端导出
jsnjlhb 2010-01-16
  • 打赏
  • 举报
回复
有没有具体的实现方式或者参考文件啊
网上大部分都是引用Microsoft.Office.Interop.Excel
或者添加COM组件的方式,虽然能实现但是如果客户安装的是其它版本的Excel就报错
验证码识别 2010-01-16
  • 打赏
  • 举报
回复
up
zming 2010-01-16
  • 打赏
  • 举报
回复
ExcelLibrary, 直接输出 BIFF8 格式的 Execel 文档。

下载地址: http://code.google.com/p/excellibrary/downloads/list

110,535

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧