Java如何导出不同版本的DXF

现在导出的是默认2013版的,最终需要的是2007版的,如何在导出DXF时转换成
2007版本的类型,不需要再手动由高转低,导出后直接可以用2007版打开。

2个回答

ASCII 格式的DXF文件可以用java利用组码实现,每个部分可进行封装。组码的书写需要注意空格,每行组码结束不能有空格,不然无法解析

1.header实现,getBoundX getBoundY是定义当前画布的左上角XY坐标,getBoundWidth(),getBoundHeight()是画布长宽
private void writeHeader ()
throws IOException
{
writeBufferLine ( " 0" ) ;
writeBufferLine ( "SECTION" ) ;
writeBufferLine ( " 2" ) ;
writeBufferLine ( "HEADER" ) ;

    writeBufferLine ( "  9" ) ;
    writeBufferLine ( "$EXTMIN" ) ;
    writeBufferLine ( " 10" ) ;
    writeBufferLine ( new Double ( getBoundX () ).toString () ) ;
    writeBufferLine ( "20" ) ;
    writeBufferLine ( new Double ( getBoundY () ).toString () ) ;
    writeBufferLine ( "30" ) ;
    writeBufferLine ( "0.0" ) ;
    writeBufferLine ( "  9" ) ;
    writeBufferLine ( "$EXTMAX" ) ;
    writeBufferLine ( " 10" ) ;
    writeBufferLine ( new Double ( convertXToPaper ( getBoundX () + getBoundWidth () ) ).
                      toString () ) ;
    writeBufferLine ( "20" ) ;
    writeBufferLine ( new Double ( convertYToPaper ( getBoundY () + getBoundHeight () ) ).
                      toString () ) ;

    writeBufferLine ( "  9" ) ;
    writeBufferLine ( "$LIMMIN" ) ;
    writeBufferLine ( " 10" ) ;
    writeBufferLine ( new Double ( convertXToPaper ( getBoundX () ) ).toString () ) ;
    writeBufferLine ( "  20" ) ;
    writeBufferLine ( new Double ( convertYToPaper ( getBoundY () ) ).toString () ) ;
    writeBufferLine ( "  9" ) ;
    writeBufferLine ( "$LIMMAX" ) ;
    writeBufferLine ( " 10" ) ;
    writeBufferLine ( new Double ( convertXToPaper ( getBoundX () + getBoundWidth () ) ).
                      toString () ) ;
    writeBufferLine ( "  20" ) ;
    writeBufferLine ( new Double ( convertYToPaper ( getBoundY () + getBoundHeight () ) ).
                      toString () ) ;

    writeBufferLine ( "  9" ) ;
    writeBufferLine ( "$PEXTMIN" ) ;
    writeBufferLine ( " 10" ) ;
    writeBufferLine ( new Double ( convertXToPaper ( getBoundX () ) ).toString () ) ;
    writeBufferLine ( "20" ) ;
    writeBufferLine ( new Double ( convertYToPaper ( getBoundY () ) ).toString () ) ;
    writeBufferLine ( "30" ) ;
    writeBufferLine ( "0.0" ) ;
    writeBufferLine ( "  9" ) ;
    writeBufferLine ( "$PEXTMAX" ) ;
    writeBufferLine ( " 10" ) ;
    writeBufferLine ( new Double ( convertXToPaper ( getBoundX () + getBoundWidth () ) ).
                      toString () ) ;
    writeBufferLine ( "20" ) ;
    writeBufferLine ( new Double ( convertYToPaper( getBoundY () + getBoundHeight () ) ).
                      toString () ) ;
    writeBufferLine ( "30" ) ;
    writeBufferLine ( "0.0" ) ;

    writeBufferLine ( "  0" ) ;
    writeBufferLine ( "ENDSEC" ) ;
}
    2.定义图层和类型
     private void writeTables ()
    throws IOException
{
    writeBufferLine ( "  0" ) ;
    writeBufferLine ( "SECTION" ) ;
    writeBufferLine ( "  2" ) ;
    writeBufferLine ( "TABLES" ) ;

    writeTableLAYER () ;
    writeTableLTYPE () ;

    writeBufferLine ( "  0" ) ;
    writeBufferLine ( "ENDSEC" ) ;
}
    3.具体的资源

 资源一般是点,线,多条线,面,面资源也是无数条线组成,所以就点、线结构

 可对写点,写线,和点线的标注进行封装,写入资源的方式很重要,1种是直接写入ENTITIES中,

 这种写法当用mapinfo转成tab格式时,每个图层可用表展现,但是表里不会带入点、线的属性。

a:写线
private void writePolylineAD ( Point2D[] _pts , int _color ,
String _lineStyle , String _layerName )
throws IOException
{
if ( _pts.length > 2 )
{
for ( int i = 0 ; i <= _pts.length - 1 ; i++ )
{
if ( i < _pts.length - 1 )
{
Point2D[] pts = new Point2D.Double[2 ] ;
pts[ 0 ] = _pts[ i ] ;
pts[ 1 ] = _pts[ i + 1 ] ;
writePolylineAD ( pts , _color , _lineStyle , _layerName ) ;
}
}
return ;
}
writeBufferLine ( " 0" ) ;
writeBufferLine ( "POLYLINE" ) ;
writeBufferLine ( " 8" ) ;
writeBufferLine ( _layerName ) ;
writeBufferLine ( " 62" ) ;
writeBufferLine ( new Integer ( _color ).toString () ) ;
writeBufferLine ( " 6" ) ;
writeBufferLine ( _lineStyle ) ;
writeBufferLine ( " 66" ) ;
writeBufferLine ( " 1" ) ;
writeBufferLine ( " 10" ) ;
writeBufferLine ( "0.0" ) ;
writeBufferLine ( " 20" ) ;
writeBufferLine ( "0.0" ) ;
writeBufferLine ( " 30" ) ;
writeBufferLine ( "0.0" ) ;

    for ( int j = 0 ; j < _pts.length ; j++ )
    {
        writeBufferLine ( "  0" ) ;
        writeBufferLine ( "VERTEX" ) ;
        writeBufferLine ( "  8" ) ;
        writeBufferLine ( _layerName ) ;
        writeBufferLine ( " 10" ) ;
        writeBufferLine ( new Double ( _pts[ j ].getX () ).toString () ) ;
        writeBufferLine ( " 20" ) ;
        writeBufferLine ( new Double ( _pts[ j ].getY () ).toString () ) ;
        writeBufferLine ( " 30" ) ;
        writeBufferLine ( "0.0" ) ;
    }

    writeBufferLine ( "  0" ) ;
    writeBufferLine ( "SEQEND" ) ;
    writeBufferLine ( "  8" ) ;
    writeBufferLine ( _layerName ) ;
}
    b:写标注
      private void writeText ( double _x , double _y , double _fontSize ,
                         int _color , String _text , int Align ,
                         String _layerName , double _angle,double xOffset,double yOffset )
    throws IOException
{
    if(_text.contains("<br>"))
    {
        ArrayList<String> textA=splitBR(_text);
        for(int j=0;j<textA.size();j++)
        {
            double tY;
            tY=_y-j*_fontSize;
            writeText(_x,tY,_fontSize,_color,textA.get(j).toString(),Align,_layerName,_angle,xOffset,yOffset);
        }
    }else
    {
        Rectangle2D rect = new Rectangle2D.Double ( getBoundX () , getBoundY () ,
                getBoundWidth () , getBoundHeight () ) ;
            int out = rect.outcode ( _x , _y ) ;
            if ( out != 0 )
            {
                 return ;
            }

            if ( _text == null || _text.equals ( "" ) )
                return ;
            writeBufferLine ( "  0" ) ;
            writeBufferLine ( "TEXT" ) ;
            writeBufferLine ( "  8" ) ;

// if ( m_bLabelMerge )
// writeBufferLine ( "label" ) ;
// else
writeBufferLine ( _layerName ) ;
writeBufferLine ( " 10" ) ;
writeBufferLine ( new Double ( convertX ( _x ) +xOffset).toString () ) ;
writeBufferLine ( " 20" ) ;
writeBufferLine ( new Double ( convertY ( _y )+yOffset ).toString () ) ;
writeBufferLine ( " 30" ) ;
writeBufferLine ( "0.0" ) ;
writeBufferLine ( " 11" ) ;
writeBufferLine ( new Double ( convertX ( _x ) +xOffset).toString () ) ;
writeBufferLine ( " 21" ) ;
writeBufferLine ( new Double ( convertY ( _y )+yOffset ).toString () ) ;
writeBufferLine ( " 31" ) ;
writeBufferLine ( "0.0" ) ;
writeBufferLine ( " 40" ) ;
writeBufferLine ( new Double ( _fontSize ).toString () ) ;
writeBufferLine ( " 41" ) ;
writeBufferLine ( "0.78" ) ;
writeBufferLine ( " 50" ) ;
writeBufferLine ( new Double ( _angle ).toString () ) ;
if ( false )
{
//文字颜色,暂时不实现
writeBufferLine ( " 62" ) ;
writeBufferLine ( new Integer ( _color ).toString () ) ;
}
writeBufferLine ( " 1" ) ;
//去掉换行符,该版本不支持
_text = _text.replace ( "\r" , "" ) ;
_text = _text.replace ( "\n" , "" ) ;

            writeBufferLine ( _text ) ;
            writeBufferLine ( " 72" ) ;
            writeBufferLine ( new Integer ( Align ).toString () ) ;
            writeBufferLine ( " 73" ) ;
            writeBufferLine ( "3" ) ;
    }

}
      第二种是把点线以BLOCKS包装,属于带属性的导出。

  点属性导出
         private void writeGisPointSingleAtt(IMapVertex v,String layerName,int blockNum,int objNum)
 throws IOException
 {
    writeBufferLine ( "  0" ) ;
    writeBufferLine ( "BLOCK" ) ;
    writeBufferLine ( "  8" ) ;
    writeBufferLine ( layerName ) ;            
    writeBufferLine ( "  2" ) ;
    //组码 block 名称
    writeBufferLine ( "BLKP"+String.valueOf(blockNum)+"p"+String.valueOf(objNum) ) ;
    writeBufferLine ( " 70" ) ;
    writeBufferLine ( "  2" ) ;
    writeBufferLine ( "  10" ) ;
    writeBufferLine ( "0.0" ) ;
    writeBufferLine ( "  20" ) ;
    writeBufferLine ( "0.0" ) ;
    writeBufferLine ( "  30" ) ;
    writeBufferLine ( "0.0" ) ;
    writeBufferLine ( "  0" ) ;
    writeBufferLine ( "POINT" ) ;
    writeBufferLine ( "  8" ) ;
    writeBufferLine ( layerName ) ;
    writeBufferLine ( "  62" ) ;
    writeBufferLine ( "  1" ) ;
    writeBufferLine ( "  10" ) ;
    writeBufferLine ( new Double(v.getX()).toString() ) ;
    writeBufferLine ( "  20" ) ;
    writeBufferLine ( new Double(v.getY()).toString() ) ;
    writeBufferLine ( "  30" ) ;
    writeBufferLine ( "0.0" ) ;
    ArrayList<String> attr=new ArrayList<String>();
    attr.add("Name");
    attr.add("Longitude");
    attr.add("Latitude");
    attr.add("Planid");
    attr.add("IsVirtual");
    attr.add("Isabpoint");
    attr.add("Iskeyres");
    attr.add("Cutpoints");
    writeAttrInVertex(attr,layerName);

    writeBufferLine ( "  0" ) ;
    writeBufferLine ( "ENDBLK" ) ;
 }
    //每个点带属性导出至DXF,便于mapinfo的转换
//20121221
private void writeGisPointWithAtt(ArrayList<IMapVertex> res,ArrayList<String> layerNameRes) 
throws IOException
{
    for(int i=0;i<res.size();i++)
    {
         YVertexReduce v=(YVertexReduce)res.get(i).getID();
          writeBufferLine ( "  0" ) ;
          writeBufferLine ( "BLOCK" ) ;
          writeBufferLine ( "  8" ) ;
          writeBufferLine ( layerNameRes.get(i) ) ;            
          writeBufferLine ( "  2" ) ;
          //组码 block 名称
          writeBufferLine ( "BLK"+String.valueOf(i) ) ;
          writeBufferLine ( " 70" ) ;
          writeBufferLine ( "  2" ) ;
          writeBufferLine ( "  10" ) ;
          writeBufferLine ( "0.0" ) ;
          writeBufferLine ( "  20" ) ;
          writeBufferLine ( "0.0" ) ;
          writeBufferLine ( "  30" ) ;
          writeBufferLine ( "0.0" ) ;
          writeBufferLine ( "  0" ) ;
          writeBufferLine ( "POINT" ) ;
          writeBufferLine ( "  8" ) ;
          writeBufferLine ( layerNameRes.get(i) ) ;
          writeBufferLine ( "  62" ) ;
          writeBufferLine ( "  1" ) ;
          writeBufferLine ( "  10" ) ;
          writeBufferLine ( new Double(v.geoX).toString() ) ;
          writeBufferLine ( "  20" ) ;
          writeBufferLine ( new Double(v.geoY).toString() ) ;
          writeBufferLine ( "  30" ) ;
          writeBufferLine ( "0.0" ) ;
          ArrayList<String> attr=new ArrayList<String>();
          attr.add("Name");
          attr.add("Longitude");
          attr.add("Latitude");
          attr.add("Planid");
          attr.add("IsVirtual");
          attr.add("Isabpoint");
          attr.add("Iskeyres");
          attr.add("Cutpoints");
          writeAttrInVertex(attr,layerNameRes.get(i));

          writeBufferLine ( "  0" ) ;
          writeBufferLine ( "ENDBLK" ) ;
    }
}
     4.结尾
    private void writeTail ()
    throws IOException
{
    writeBufferLine ( "  0" ) ;
    writeBufferLine ( "EOF" ) ;
}

@qq_42835472,你的这个也可以,不过我是直接用的ftl,已经解决了,也谢谢你的回答。- _-

SDFDHY
SDFDHY 回复qq_42835472: 求分享源码
6 个月之前 回复
qq_42835472
qq_42835472 嗯嗯,美食,多探讨
大约一年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
突破dxf 9.2 dxf导出
突破cad 9.2 dxf导出。 任意码注册。 请选择导出位置。
Allegro导出DXF步骤
Allegro导出DXF步骤 可用AUTOCAD打开编辑,生成可编辑文件
DXF文件的导入与导出
谁有用C#编写DXF文件读写操作的实例,请给参考的实例。多谢!
genesis导出DXF
genesis2000自动导电DXF脚本
AD2017导出DXF文件
第一步,打开PCB文件 第二步,导出DXF 第三步,设置导出格式
导出与导入DXF
一、导入DXFhttps://jingyan.baidu.com/article/a3f121e4cc3041fc9052bbab.html二 、导出DXF参考:《PADS9.5实战攻略与高速PCB设计.pdf》 page 115
Allegro 导出 DXF文件
导出 DXF文件: 选择路径时,两个路径一样。 出现问题:ERROR: Invalid program arguments. Terminating program. 原因:DXF输出文档路径放在了中文命名的文件夹下,更改输出路径为全英文及解决。 ...
iShare·AD小技巧--如何导出dxf文件
在文件  然后导出  选择  DXF  就可以导出 选择相应的格式
AD10无法导出DXF解决方法
解决新安装的Altium Designer 10无法导出DXF解决方法
allegro16.2导出DXF的详细步骤
allegro16.2导出DXF的详细步骤
Houdini导出DXF文件的方法
直接从Houdini导出DXF文件在PS和CAD中都无法打开 可能是因为CAD版本老(2010),但是PS是CC2014觉得应该没问题。 不能直接导出,就找一个曲折的方法: 不需要使用Convertline节点,它会把图形的每个线段都折成单一对象 从Houdini中导出Fbx文件,这个FBX使用Max打不开,Max会飙内存到99%,然后把自己卡死 但是这个FBX可以使用Maya轻
不同版本的数据库的数据导入和导出的问题
请问那位网友遇到过这样的问题?rn 我有把一台ORACLE8.1.7的数据库的中用户RSDSP表中的数据全部导入到一台ORACLE7.3.4的数据库中.请问该如何操作?
谁知道Domino不同版本对java不同版本的支持
刚看到一个不知道是否可信:rnR5-1.2rnR6-1.3rnR7-1.4rnrn想知道domino版本对java支持的最高版本
java生成DXF格式文件
ASCII 格式的DXF文件可以用java利用组码实现,每个部分可进行封装。组码的书写需要注意空格,每行组码结束不能有空格,不然无法解析 1.header实现,getBoundX getBoundY是定义当前画布的左上角XY坐标,getBoundWidth(),getBoundHeight()是画布长宽   private void writeHeader () ...
java 读写dxf文件
如题,如何用java读写dxf文件中的文字内容
java读DXF,java源代码
利用java读取dxf文件
java dxf读写
java dxf 读写源码
java不同版本的增强特性
在学习版本增强的时候,各种博文众说纷纭,我看得眼花缭乱。为了学习最权威的知识,我还是查看了java的官方手册。 Java 5的增强特性: 1. 泛型:这种期待已久的类型系统增强允许类型或方法对各种类型的对象进行操作,同时提供编译时类型安全性。 它为集合框架增加了编译时类型安全性且消除了具体对象使用时的复杂性。 2. for循环的增强:这种新的语言结构消除了迭代集合和数组时迭代器和索引变量的苦...
mac java不同版本切换
安装不同版本的JDK,入1.6,1.7、1.8 安装jenv 执行:curl -s get.jenv.io | bash 进入jenv目录,然后建相关目录: cd ~/.jenv/candidates/ mkdir java cd java mkdir 1.6 mkdir 1.7 mkdir 1.8 执行如下命 命令中的java版本号和路径需要根据您自己的情况做相
AD16导出dxf文件给结构工程师
1.选择使用的层打开 2.file–export–dxf/dwg,设置好参数后点击确定就可以了。文件会在你设定的目录下
DXF
在导出DXF文件时,其中ARC:rn10/20/30(圆心坐标是用WCS的值吗)rn50(起始角度,如何理解呢)rn51(终止角度,如何理解呢)rn
常用的SCH和PCB设计软件导出DXF图
目前国内用CAXA的较多,常用的图纸模板都是CAXA的。CAXA能接收DXF格式的文件,选择并入文件到当前图纸即可,这样就避免了在OrCAD和PADS里专门设计模板的麻烦。 so,PADS to CAXA:文件--->导出--->DXF---->选择相应的层和单位(top层和silk top  bottom和silk bottom;单位选择mm)。       OrCAD to CAXA: *
用Allegro导出DXF/DWG格式文件
用Allegro导出DXF/DWG格式文件
allegro导出dxf文件的方法与步骤.pdf
allegro导出dxf文件的方法与步骤.pdf
20161016-Allegro16.6中将板框导出DXF文件
注意:在CAD生成的DXF文件导入Allegro的过程中,发现只有R12版本的才比较好用,故从Allegro中导出DXF时,也导成R12格式的比较好。步骤如下: 1.File->Export->DXF…先把路径设置好 2.设置转换文件 3.设置转换文件 4.编辑层 5.Map后OK即可
BRK服装CAD可以导出DXF文件
BRK服装CAD
读取Adobe illustrator导出dxf的样条曲线
读取Adobe illustrator导出dxf的样条曲线
求助,mapx中导出dxf格式地图
mapx中导出wmf格式在autocad中打开为独立的对象,无法编辑内容。求救导出dxf格式的思路
Halcon导出dxf文件转换至不同的图层
dxf文件时欧特克公司开发的一种CAD文件格式,在轻工业生产中许多二维图的绘制是通过dxf文件进行操作。为了便于机器对皮料、布匹等进行一次性智能操作,需要在dxf文件的不同图层上绘制相应的切割路径。 同理,视觉检测则需要将缺陷轮廓、皮料等级轮廓等输入至dxf不同的图层以提高后续设备的自动化等级。 视觉检测软件Halcon确实可以将检测轮廓输出至dxf文件中,但是Hal
如何下载谷歌地球高程并导出等高线为DXF文件
众所周知,谷歌地球为广大用户提供了全球的高程数据,用户可以在线浏览和查看某个点的高程(图1),但是在线浏览并不是那么方便,一旦没有网,就无法得知想要点的高程值。那我们如何才能获取到这些高程数据并将其加以利用,笔者在这里给大家推荐一个实用的方法,帮助大家获取谷歌地球的高程数据并将其导出为矢量数据(即*.dxf格式),希望对大家有所帮助。 获取更多免费软件、技术加群:329081749
dxf读取,dxf读取
dxf读取,希望对你能有帮助,dxf读取,希望对你能有帮助
如何构造DXF文件~?
比如 知道两点坐标 如何构造一条直线呢rn后者 知道圆点和半径 如何构造个圆?rnrnrnrnrnrnrn看了dxf格式说明rn很多天rn没头绪rn请高手指点rn最好提供个VC编的参考rn谢谢
如何编写dxf文件??????
想自己编写dxf文件,只编写ENTITIES部分,LINE,CIRCLE,ARC,都没问题,可为什么LWPOLYLINE,ELLIPSE之类的就有问题你,如LWPOLYLINE说组码90为定义,怎么回是啊,是不是编这几个图元要另外写什么信息啊。请各位大虾帮忙啊。谢过先。!!!!
C#导出excel时遇到不同版本的问题...
C# winform程序 我要导出excel 引用的是Microsoft Excel 11.0 Object Library 在本机和第一部测试机A上导出正常,但是到第二部测试机B上就出現无法导出的问题 到第二部测试机上进行调试 发现它无法找到(Microsoft Excel 11.0 Object Library)但它已经装上了excel,唯一不同的是它和我开发机的excel版本不一样(我们同是excel2003 但是子版本号不一样) rn 于是我在B上重新添加引用 可以找到Microsoft Excel 11.0 Object Library 但是引用进来以后 它使用的命名空间改变了,我以前用的是Microsoft.Office.Interop.Excel空间,而在B上用的是Microsoft.Office.Core命名空间 请问这个怎么处理啊??? 我可不可以直接把我的 Microsoft Excel 11.0 Object Library的dll放到工程内 然后使用啊???rn 求解答!
如何兼容不同版本EXCEL.DLL?
在C#中引入excel.dll,实现对EXCEL表的操作。但是,不同版本的rnexcel.dll,其excel.application.workbooks.open(...)函数rn不同:在1.3版本中只有13个参数,但在1.4版本中,却在最后多了2rn个参数,因此在不同版本的机器上编译都无法通过。rnrn各位有好的解决办法吗?rn
如何配置不同版本的Tomcat?
我从Tomcat站点下载了Tomcat的不同版本。本别是:apache-tomcat-5.5.16-src.zip jakarta-tomcat-3.3.2-src.tar.gz jakarta-tomcat-4.1.31-src.tar.gz jakarta-tomcat-5.0.30-src.tar.gz 还有一个是从其他站点下的jakarta-tomcat.zip解压后,只有jakarta-tomcat.zip的目录中得bin目录中有startup.bat。因为我知道,只有点了它才算开启了服务。其他的在目录里面根本就找不到这个批处理。我分别指定了环境变量后,也只有jakarta-tomcat.zip解压后的生效。rn看来不同版本的Tomcat得配置和结构都不一样。我想请教一下各位有经验的朋友,到底应该如何配置才能生效?
不同版本的Python,如何pip
系统有两python: python3,pip3/pip。 python/python2 怎么办? 先看看有没有pip2,没有的话安装: /usr/bin/python2: No module named pip sudo apt install python-pip 然后: pip2 install ... python2 -m pip install ... ...
如何指定不同版本的交叉编译器?
linux下安装了不同版本的arm-linux-gcc(2.95.3 & 4.3.2)。怎么指定一个版本的编译器对一个.c源文件进行编译呢?
Java如何导出Excel表格
Java导出Excel Markdown和扩展Markdown简洁的语法 代码块高亮 - 代码块 代码块语法遵循标准markdown代码,例如: //&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;!—Servlet 界面直接调用就可以了,这里我不会转小数类型--&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;a
java如何导出txt文件
我想把我获得的数据(一个list),导出成固定路径的TXT文本文件rn要导出的格式如下: rncity ¦area_code ¦start_gt ¦hlr_name ¦ //这是表示数据库的字段 rn金华 ¦579 ¦861373892 ¦金华HLR3 ¦ //这是依次对应的数据 rn金华 ¦579 ¦861373893 ¦金华HLR3 ¦ rn金华 ¦579 ¦861373894 ¦金华HLR3 ¦ rn金华 ¦579 ¦861373895 ¦金华HLR3 ¦ rnrn我做过一个导出EXCEL文件的例子,但导出TXT没用过.哪位有这方面的开发经验,请教一下,生成TXT用哪个类啊,我是开发新手,请高人详细指点下,谢谢rn我导出EXCEL的文件如下:rnpublic class ExportExcel rnrn public static byte[] toSellExcel(String[] column, List list, String filename,rn String[] excelFile) rn rn byte[] bytes = null;rn try rn // 创建新的Excel 工作簿rn HSSFWorkbook workbook = new HSSFWorkbook();rn // 在Excel工作簿中建一工作表,其名为缺省值rn HSSFSheet sheet = workbook.createSheet();rn // 设置Excel的显示格式rn HSSFRow row;rn HSSFCell cell;rn HSSFCellStyle style;rn HSSFFont hf;rnrn for (int i = 0; i < 1; i++) rn // 在索引0的位置创建行(最顶端的行)rn row = sheet.createRow((short) i);rn for (int j = 0; j < column.length; j++) rn // 在索引0的位置创建单元格(左上端)(相当于列数)rn cell = row.createCell((short) j);rn // 定义单元格为字符串类型rn cell.setCellType(HSSFCell.CELL_TYPE_STRING);rnrn // 定义样式rn style = workbook.createCellStyle();rn // 创建工作本的字体rn hf = workbook.createFont();rn hf.setFontName("楷体_GB2312");rn style.setFont(hf);rn // 设置列的属性rn cell.setEncoding(HSSFCell.ENCODING_UTF_16);rn cell.setCellStyle(style);rn // 在所创建的单元格填入值rn if (i == 0) rn cell.setCellValue(column[j]);rn rn rn rnrn for (int i = 0; i < list.size(); i++) rnrn Object obj = list.get(i);rn Class objclass = obj.getClass();rn Field[] fields = obj.getClass().getDeclaredFields();rn int count=0;rn for (int j = 0; j < fields.length; j++) rn Field subField = fields[j];rn String subName = subField.getName();rn boolean flag = true;rn for (int k = 0; k < excelFile.length; k++) rn if (excelFile[k].equals(subName)) rn flag = false;rn break;rn rn rn if (flag) rn String getFieldMethod = "get"rn + subName.substring(0, 1).toUpperCase()rn + subName.substring(1, subName.length());rn Class FieldClass = subField.getType();rn String FieldClassName = FieldClass.getName();rn String value = "";rn if (!FieldClass.isArray()) rn Method method = null;rn try rn method = obj.getClass().getMethod(rn getFieldMethod, null);rn catch (Exception e1) rn e1.printStackTrace();rn rn if (method != null) rn Object methodValue = (Object) method.invoke(rn obj, null);rn if (methodValue != null) rn value = methodValue.toString();rn rn rn rn row = sheet.createRow((short) i + 1); // 从第1行开始rn // 在索引0的位置创建单元格(左上端)(相当于列数)rn cell = row.createCell((short) count);rn count++;rn // 定义单元格为字符串类型rn cell.setCellType(HSSFCell.CELL_TYPE_STRING);rnrn // 定义样式rn style = workbook.createCellStyle();rn // 创建工作本的字体rn hf = workbook.createFont();rn hf.setFontName("楷体_GB2312");rn style.setFont(hf);rn // 设置列的属性rn cell.setEncoding(HSSFCell.ENCODING_UTF_16);rn cell.setCellStyle(style);rn // 在所创建的单元格填入值rnrn cell.setCellValue(value);rn rnrn rnrn rn // 新建一输出文件流rnrn rn bytes= workbook.getBytes();rn rnrn catch (Exception e) rn System.out.println("已运行 xlCreate() :错误信息 " + e);rn e.printStackTrace();rn rn return bytes;rn rn rnrn
相关热词 c#入门推荐书 c# 解码海康数据流 c# xml的遍历循环 c# 取 查看源码没有的 c#解决高并发 委托 c#日期转化为字符串 c# 显示问号 c# 字典对象池 c#5.0 安装程序 c# 分页算法