我用下面的类创建了个Excel文件,并写入了数据,
class CExportExcel
{
System.IO.FileStream _wirter; public CExportExcel(string strPath)
{
_wirter = new System.IO.FileStream(strPath, System.IO.FileMode.OpenOrCreate);
}
/// <summary>
/// 写入short数组
/// </summary>
/// <param name="values"></param>
private void _writeFile( short [] values)
{
foreach ( short v in values)
{
byte [] b = System.BitConverter.GetBytes(v);
_wirter.Write(b, 0, b.Length);
}
}
/// <summary>
/// 写文件头
/// </summary>
public void BeginWrite()
{
_writeFile( new short [] { 0x809, 8, 0, 0x10, 0, 0 });
}
/// <summary>
/// 写文件尾
/// </summary>
public void EndWrite()
{
_writeFile( new short [] { 0xa, 0 });
_wirter.Close();
}
/// <summary>
/// 写一个数字到单元格x,y
/// </summary>
/// <param name="x"></param>
/// <param name="y"></param>
/// <param name="value"></param>
public void WriteNumber( short x, short y, double value)
{
_writeFile( new short [] { 0x203, 14, x, y, 0 });
byte [] b = System.BitConverter.GetBytes(value);
_wirter.Write(b, 0, b.Length);
}
/// <summary>
/// 写一个字符到单元格x,y
/// </summary>
/// <param name="x"></param>
/// <param name="y"></param>
/// <param name="value"></param>
public void WriteString( short x, short y, string value)
{
byte [] b = System.Text.Encoding.Default.GetBytes(value);
_writeFile( new short [] { 0x204, ( short )(b.Length + 8), x, y,0, ( short )b.Length });
_wirter.Write(b, 0, b.Length);
} 用下面的方法读的时候确读不出来,难道这并不是真正的Excel文件吗?
public static DataSet fLoadDataFromExcel(string paraFilePath)
{
try
{
EmployeeControl.MyTraceRecord.fWriteTrace("Enter fLoadDataFromExcel(" + paraFilePath + ")");
string strTableName = "";
strTableName = "sheet1";
string strConn;
strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + paraFilePath + ";Extended Properties='Excel 8.0;HDR=False;IMEX=1'";
OleDbConnection OleConn = new OleDbConnection(strConn);
OleConn.Open();
String sql = "SELECT * FROM [" + strTableName + "$]";//可是更改Sheet名称,比如sheet2,等等 OleDbDataAdapter OleDaExcel = new OleDbDataAdapter(sql, OleConn);
DataSet OleDsExcle = new DataSet();
OleDaExcel.Fill(OleDsExcle, strTableName);
OleConn.Close();
EmployeeControl.MyTraceRecord.fWriteTrace("Leave fLoadDataFromExcel(" + paraFilePath + ")"); return OleDsExcle;
}
catch (Exception err)
{
EmployeeControl.MyTraceRecord.fWriteError("数据绑定Excel失败!失败原因:" + err.Message);
return null;
}
}
class CExportExcel
{
System.IO.FileStream _wirter; public CExportExcel(string strPath)
{
_wirter = new System.IO.FileStream(strPath, System.IO.FileMode.OpenOrCreate);
}
/// <summary>
/// 写入short数组
/// </summary>
/// <param name="values"></param>
private void _writeFile( short [] values)
{
foreach ( short v in values)
{
byte [] b = System.BitConverter.GetBytes(v);
_wirter.Write(b, 0, b.Length);
}
}
/// <summary>
/// 写文件头
/// </summary>
public void BeginWrite()
{
_writeFile( new short [] { 0x809, 8, 0, 0x10, 0, 0 });
}
/// <summary>
/// 写文件尾
/// </summary>
public void EndWrite()
{
_writeFile( new short [] { 0xa, 0 });
_wirter.Close();
}
/// <summary>
/// 写一个数字到单元格x,y
/// </summary>
/// <param name="x"></param>
/// <param name="y"></param>
/// <param name="value"></param>
public void WriteNumber( short x, short y, double value)
{
_writeFile( new short [] { 0x203, 14, x, y, 0 });
byte [] b = System.BitConverter.GetBytes(value);
_wirter.Write(b, 0, b.Length);
}
/// <summary>
/// 写一个字符到单元格x,y
/// </summary>
/// <param name="x"></param>
/// <param name="y"></param>
/// <param name="value"></param>
public void WriteString( short x, short y, string value)
{
byte [] b = System.Text.Encoding.Default.GetBytes(value);
_writeFile( new short [] { 0x204, ( short )(b.Length + 8), x, y,0, ( short )b.Length });
_wirter.Write(b, 0, b.Length);
} 用下面的方法读的时候确读不出来,难道这并不是真正的Excel文件吗?
public static DataSet fLoadDataFromExcel(string paraFilePath)
{
try
{
EmployeeControl.MyTraceRecord.fWriteTrace("Enter fLoadDataFromExcel(" + paraFilePath + ")");
string strTableName = "";
strTableName = "sheet1";
string strConn;
strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + paraFilePath + ";Extended Properties='Excel 8.0;HDR=False;IMEX=1'";
OleDbConnection OleConn = new OleDbConnection(strConn);
OleConn.Open();
String sql = "SELECT * FROM [" + strTableName + "$]";//可是更改Sheet名称,比如sheet2,等等 OleDbDataAdapter OleDaExcel = new OleDbDataAdapter(sql, OleConn);
DataSet OleDsExcle = new DataSet();
OleDaExcel.Fill(OleDsExcle, strTableName);
OleConn.Close();
EmployeeControl.MyTraceRecord.fWriteTrace("Leave fLoadDataFromExcel(" + paraFilePath + ")"); return OleDsExcle;
}
catch (Exception err)
{
EmployeeControl.MyTraceRecord.fWriteError("数据绑定Excel失败!失败原因:" + err.Message);
return null;
}
}
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货