当前位置: 代码迷 >> ASP.NET >> 用 StreamWriter 往带多个sheet的xls文件添加数据时遇到的有关问题
  详细解决方案

用 StreamWriter 往带多个sheet的xls文件添加数据时遇到的有关问题

热度:10391   发布时间:2013-02-25 00:00:00.0
用 StreamWriter 往带多个sheet的xls文件添加数据时遇到的问题
想通过StreamWriter向a.xls文件添加多行数据(之前用Excel对象写数据,但速度太慢.).
Excel限制了每个sheet最多有65536行数据,而我要添加进去的数据远超过这个数,所以想通过在一个xls文件中建立多个sheet来实现.
假如a.xls中有两个sheet(sheet1,sheet2).
问题1:如何选择不同的sheet,以便用StreamWriter能对不同的sheet写数据.
比如,当我
C# code
StreamWriter sw = new StreamWriter(@"c:\a.xls");sw.WriteLine("testText1/ttestText2");
时,怎么知道或者选择对哪个sheet(sheet1 or sheet2?)写数据?
问题2:当我
C# code
StreamWriter sw = new StreamWriter(@"c:\a.xls");sw.WriteLine("testText1/ttestText2");sw.Flush();sw.close();
时,打开a.xls一看,发现原本有两个sheet的a.xls文件(手按圣经,确定!),变成只有一个sheet了,而且sheet的名字也变了(重新生成了个a.xls覆盖了之前的a.xls?),但是数据写进去了.
  而用
C# code
StreamWriter sw = File.AppendText(@"c:\a.xls);sw.WriterLine("testText1/ttestText2");sw.Flush();sw.close();(
时,a.xls仍然有两个sheet,但数据没有写进去.这如何理解呢?

  参与者有分,现行谢过!

------解决方案--------------------------------------------------------
明显用streamwriter写的时候把之前存在于excel文档中的数据都抹掉了
所以sheet的区分就没有了
用File.AppendText写的时候,是在excel文档中仅存的两个sheet之外的地方写入数据了,所以没有显示

操作excel页可以用oledb
方法:
C# code
OleDbConnection objConn = null;DataSet data = new DataSet();try{string strConn = @"Provider=Microsoft.ACE.OleDb.12.0;Data Source=c:"待发工资.xlsx;Extended Properties='Excel 12.0;HDR=YES'";//IMEX=1为只读//"Provider=Microsoft.Jet.OleDb.4.0;data source=c:"待发工资.xlsx;Extended Properties=""Excel 12.0;HDR=YES;IMEX=1""";                objConn = new OleDbConnection(strConn);objConn.Open();//System .Data . DataTable schemaTable = objConn.GetOleDbSchemaTable(System.Data.OleDb.OleDbSchemaGuid.Tables, null);//int SheetIndex = 0;//string tableName = schemaTable.Rows[SheetIndex][2].ToString().Trim();string strSql = "Select   *   From   [Sheet1$]";OleDbCommand objCmd = new OleDbCommand(strSql, objConn);OleDbDataAdapter sqlada = new OleDbDataAdapter();sqlada.SelectCommand = objCmd;sqlada.Fill(data);string str = "";for (int i = 0; i < data.Tables[0].Rows[0].ItemArray.Length; i++){str += data.Tables[0].Rows[0].ItemArray[i].ToString() + ".";}MessageBox.Show(str);objConn.Close();}catch (Exception ex){objConn.Close();Console.WriteLine(ex.Message.ToString());}
------解决方案--------------------------------------------------------
StreamWriter来用写文件的方式生成excel其实就是在写csv文件,而只是把文件名存成了xls罢了

一个csv文件能有多个sheet吗?
不能
所以你的问题估计也是不能
  相关解决方案