日期:2014-05-18  浏览次数:20518 次

用 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吗?
不能
所以你的问题估计也是不能