本帖最后由 MOIZXO 于 2014-10-20 16:00:27 编辑

解决方案 »

  1.   

    问题问的太乱
    先把问题捋清楚了,写个伪代码,然后再问
    不要一上来就发一大堆代码
    你发的再多也发不全,不可能整个工程的代码都发上来
    而你自己根本不清楚到底是哪里出了问题
    所以很可能真正有问题的代码反而没有发出来
    先把功能描述清楚,然后伪代码写明白每个模块都干了些什么比如什么excel又转txt的,完全不明白你在干什么
      

  2.   


    不好意思,没有发帖经验。。
    简单描述一下:
    上传excel文档,把符合条件的信息筛选保存到txt,以txt文本内容作为邮件的内容发送。认为出问题的地方就是excel输出到txt,写入失败。
    exportExcel()
    {
        StreamWriter SWriter = new StreamWriter(ConfigurationManager.AppSettings["txt"], false, Encoding.Default);
        //遍历
        return temp;
    }
      

  3.   

    话说,既然你已经能够读取excel,并将数据放到内存中了,为什么还要再生成txt,然后再读取txt,不觉得是脱裤子放屁吗
    除非你发email的程序和上传文件的网站是分开的,根本不是同一个工程.
    那么你需要读取txt之后,立即删除这个临时文件,以便下次再次生成这个txt
      

  4.   

    excel没有关闭,之前我有过类似的情况,后来我解决了我就是吧操作excel的内容放在两个不同函数里面,不,实例化excel对象放在a函数中,关闭excel对象也在a中使用excel的功能,我放在B函数中,B中的excel对象由a传参数进去,这样就可以正确关闭excel对象了,我也不知道为什么
      

  5.   

    用NPOI吧,不要另开excel进程去处理excel
      

  6.   

    读取Excel数据到文本文件示例
     private void btn_Txt_Click(object sender, EventArgs e)
            {
                //连接Excel数据库
                OleDbConnection olecon = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + txt_Path.Text + ";Extended Properties=Excel 8.0");
                olecon.Open();//打开数据库连接
                OleDbDataAdapter oledbda = new OleDbDataAdapter("select * from [" + cbox_SheetName.Text + "$]", olecon);//从工作表中查询数据
                DataSet myds = new DataSet();//实例化数据集对象
                oledbda.Fill(myds);//填充数据集
                StreamWriter SWriter = new StreamWriter(cbox_SheetName.Text + ".txt", false, Encoding.Default);//实例化写入流对象
                string P_str_Content = "";//存储读取的内容
                for (int i = 0; i < myds.Tables[0].Rows.Count; i++)//遍历数据集中表的行数
                {
                    for (int j = 0; j < myds.Tables[0].Columns.Count; j++)//遍历数据集中表的列数
                    {
                        P_str_Content += myds.Tables[0].Rows[i][j].ToString() + "  ";//记录当前遍历到的内容
                    }
                    P_str_Content += Environment.NewLine;//字符串换行
                }
                SWriter.Write(P_str_Content);//先文本文件中写入内容
                SWriter.Close();//关闭写入流对象
                SWriter.Dispose();//释放写入流所占用的资源
                MessageBox.Show("已经将" + cbox_SheetName.Text + "工作表中的数据成功写入到了文本文件中", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }