[攒分贴] 通过文件结构直接生成xls文件

jinjazz 2008-08-01 03:19:30
加精
直接通过excel可以识别的文件结构生成xls文件的方法,这样就可以不引用麻烦的ole了

using System;
using System.Collections.Generic;
using System.Text;
namespace ConsoleApplication16
{
class Program
{
static void Main(string[] args)
{
//不通过OLE生成excel文件的方法
ExcelWriter excel = new ExcelWriter(@"c:\test.xls");
excel.BeginWrite();
excel.WriteString(0, 0, "Name");
excel.WriteString(0, 1, "Score");
excel.WriteString(1, 0, "jinjazz");
excel.WriteNumber(1, 1, 100);
excel.WriteString(2, 0, "游客");
excel.WriteNumber(2, 1, 0);
excel.EndWrite();
}
}
public class ExcelWriter
{
System.IO.FileStream _wirter;
public ExcelWriter(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);
}
}
}


blog同步更新:
http://blog.csdn.net/jinjazz/archive/2008/08/01/2753869.aspx
...全文
2111 67 打赏 收藏 转发到动态 举报
写回复
用AI写文章
67 条回复
切换为时间正序
请发表友善的回复…
发表回复
lijshuai 2012-02-07
  • 打赏
  • 举报
回复
<font size="15" color="red">Mark</font>
yojinlin 2012-02-03
  • 打赏
  • 举报
回复
學習了。
larissa523 2012-02-03
  • 打赏
  • 举报
回复
学习了。
ttssrs 2012-02-03
  • 打赏
  • 举报
回复
mark
yojinlin 2012-01-27
  • 打赏
  • 举报
回复
學習了。
yojinlin 2012-01-16
  • 打赏
  • 举报
回复
學習了。
yojinlin 2012-01-16
  • 打赏
  • 举报
回复
學習了。
awinds 2012-01-12
  • 打赏
  • 举报
回复
mark
liuyu52022 2011-02-15
  • 打赏
  • 举报
回复
很有用啊。那怎么将一个图形插入到单元格中呢?
qinguanhua 2011-02-14
  • 打赏
  • 举报
回复
路过学习
telyou 2011-01-30
  • 打赏
  • 举报
回复
看看精华帖,不忘取点经。
结婚兔 2011-01-25
  • 打赏
  • 举报
回复
mark
lufang_xy73 2010-09-04
  • 打赏
  • 举报
回复
表线和格式怎么办?
guolunfeng 2010-08-31
  • 打赏
  • 举报
回复
mark
lantianwangzhao 2010-08-19
  • 打赏
  • 举报
回复
mark
kakajay008 2010-07-28
  • 打赏
  • 举报
回复
mark而已
Maths_bai 2009-07-14
  • 打赏
  • 举报
回复
c#版

public class ExcelWriter
{

private System.IO.FileStream _wirter;

public ExcelWriter(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);
}

}
strayflower 2008-10-05
  • 打赏
  • 举报
回复
Nice work.
hxwangcong 2008-10-03
  • 打赏
  • 举报
回复
太牛X了,楼主,我崇拜你!
非名人 2008-08-18
  • 打赏
  • 举报
回复
8错8错
加载更多回复(47)

110,537

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧