现在我遇到这样一个问题,由于客户所装的OFFICE版本不一样,如果调用Excel的COM组件。客户端会提示无法找到“Microsoft.Office.Interop.Excel”。
  所以我想请教一下,有没有不通过引用com组件的方式将dataset导入到Excel文件中。我是在winform环境下。

解决方案 »

  1.   

    ExcelLibrary, 直接输出 BIFF8 格式的 Execel 文档。下载地址: http://code.google.com/p/excellibrary/downloads/list
      

  2.   

    有没有具体的实现方式或者参考文件啊
    网上大部分都是引用Microsoft.Office.Interop.Excel
    或者添加COM组件的方式,虽然能实现但是如果客户安装的是其它版本的Excel就报错
      

  3.   

    http://topic.csdn.net/u/20100112/08/67e4c827-62b4-48e2-8b55-b1335f6d6d4f.html
    看这个帖子把
      

  4.   

    可以不引用就操作Excel;参考:
    Type objExcelType = Type.GetTypeFromProgID("Excel.Application");
    object objBooks = objApp.GetType().InvokeMember("Workbooks", BindingFlags.GetProperty, null, objApp, null);
    ....
    你再搜一下,有的是。
      

  5.   

    7楼提供的资料我已经看过了,我之前也是这么处理的,但是客户端装的Excel的版本不同,所以有些地方会提示无法找到“Microsoft.Office.Interop.Excel”
    所以我才想有没有其他的方式
      

  6.   

    hbxtlhx说的对  我也是用这种办法
      

  7.   

    给你代码参考参考吧。
    ---------------------------------、
    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;
            }
        }
    ----------------------------------有问题可回复
      

  8.   

    用org.in2bits.MyXls.dll
    对直接可以将DataSet转换成Excel输入,绝对强大,非常推荐!!!
      

  9.   

    问题已经解决了,非常感谢hbxtlhx提供的资料
    上网搜索了一下,采用晚期绑定Excel的方式可以解决Excel版本不同的问题
    但有个问题是第一次用时显得很忙,以后就非常快速了,不知道这个问题有什么好的解决方式
      

  10.   

    我有高速且稳定 又不用 COM的方法 需要的请联系 免费
    QQ:529679044