使用“WPS表格”导出Excel文档

本文介绍了一种使用WPS2005的二次开发功能结合.NET平台,从XML文档中读取成员信息并将其导出到多个Excel文件的方法。通过解析XML数据,程序能够自动生成格式化的Excel表格。
昨天我提出了利用WPS 2005二次开发功能,使用.net开发文档导出的程序。今天,我将这个想法进行了实践。

程序所实现的功能是从一个表示成员信息的xml文档中读取数据,并将这些数据导出为Excel表格,表格的样式如下图所示:


表示成员信息的xml文档(保存在c:\members.xml供下面的代码调用)内容如下:
None.gif <? xml version="1.0" encoding="UTF-8" ?>
None.gif
< members >
None.gif    
< member >
None.gif        
< name > 张三 </ name >
None.gif        
< sex > </ sex >
None.gif        
< birthday > 1980年12月4日 </ birthday >
None.gif        
< nationality > </ nationality >
None.gif        
< political_status > 党员 </ political_status >
None.gif        
< native_place > 江苏南京 </ native_place >
None.gif        
< qualification > 本科 </ qualification >
None.gif        
< telephone > 025-8000000 </ telephone >
None.gif        
< mobile > 138138***** </ mobile >
None.gif        
< graduating_school > 南京大学 </ graduating_school >
None.gif        
< address > 南京市中山东路******* </ address >
None.gif        
< email > zhang.san@sample.com </ email >
None.gif    
</ member >
None.gif    
< member >
None.gif        
< name > 李四 </ name >
None.gif        
< sex > </ sex >
None.gif        
< birthday > 1981年9月12日 </ birthday >
None.gif        
< nationality > </ nationality >
None.gif        
< political_status > 团员 </ political_status >
None.gif        
< native_place > 江苏苏州 </ native_place >
None.gif        
< qualification > 本科 </ qualification >
None.gif        
< telephone > 025-8000000 </ telephone >
None.gif        
< mobile > 138138***** </ mobile >
None.gif        
< graduating_school > 东南大学 </ graduating_school >
None.gif        
< address > 南京市某某路******* </ address >
None.gif        
< email > li.si@sample.com </ email >
None.gif    
</ member >
None.gif    
< member >
None.gif        
< name > 小美 </ name >
None.gif        
< sex > </ sex >
None.gif        
< birthday > 1982年1月18日 </ birthday >
None.gif        
< nationality > </ nationality >
None.gif        
< political_status > 团员 </ political_status >
None.gif        
< native_place > 安徽黄山 </ native_place >
None.gif        
< qualification > 本科 </ qualification >
None.gif        
< telephone > 025-8000000 </ telephone >
None.gif        
< mobile > 138138***** </ mobile >
None.gif        
< graduating_school > 南京理工大学 </ graduating_school >
None.gif        
< address > 南京市某某路******* </ address >
None.gif        
< email > xiao.mei@sample.com </ email >
None.gif    
</ member >
None.gif    
< member >
None.gif        
< name > 王二 </ name >
None.gif        
< sex > </ sex >
None.gif        
< birthday > 1981年4月14日 </ birthday >
None.gif        
< nationality > </ nationality >
None.gif        
< political_status > 团员 </ political_status >
None.gif        
< native_place > 山东烟台 </ native_place >
None.gif        
< qualification > 研究生 </ qualification >
None.gif        
< telephone > 025-8000000 </ telephone >
None.gif        
< mobile > 138138***** </ mobile >
None.gif        
< graduating_school > 南京航空航天大学 </ graduating_school >
None.gif        
< address > 南京市某某路******* </ address >
None.gif        
< email > wan.er@sample.com </ email >
None.gif    
</ member >
None.gif    
< member >
None.gif        
< name > 小莉 </ name >
None.gif        
< sex > </ sex >
None.gif        
< birthday > 1982年3月18日 </ birthday >
None.gif        
< nationality > </ nationality >
None.gif        
< political_status > 党员 </ political_status >
None.gif        
< native_place > 江苏常熟 </ native_place >
None.gif        
< qualification > 研究生 </ qualification >
None.gif        
< telephone > 025-8000000 </ telephone >
None.gif        
< mobile > 138138***** </ mobile >
None.gif        
< graduating_school > 南京大学 </ graduating_school >
None.gif        
< address > 南京市某某路******* </ address >
None.gif        
< email > xiao.li@sample.com </ email >
None.gif    
</ member >
None.gif    
< member >
None.gif        
< name > Jack </ name >
None.gif        
< sex > </ sex >
None.gif        
< birthday > 1980年12月4日 </ birthday >
None.gif        
< nationality > </ nationality >
None.gif        
< political_status > 党员 </ political_status >
None.gif        
< native_place > 江苏南京 </ native_place >
None.gif        
< qualification > 本科 </ qualification >
None.gif        
< telephone > 025-8000000 </ telephone >
None.gif        
< mobile > 138138***** </ mobile >
None.gif        
< graduating_school > 南京大学 </ graduating_school >
None.gif        
< address > 南京市中山东路******* </ address >
None.gif        
< email > jack@sample.com </ email >
None.gif    
</ member >
None.gif    
< member >
None.gif        
< name > Joe </ name >
None.gif        
< sex > </ sex >
None.gif        
< birthday > 1981年9月12日 </ birthday >
None.gif        
< nationality > </ nationality >
None.gif        
< political_status > 团员 </ political_status >
None.gif        
< native_place > 江苏苏州 </ native_place >
None.gif        
< qualification > 本科 </ qualification >
None.gif        
< telephone > 025-8000000 </ telephone >
None.gif        
< mobile > 138138***** </ mobile >
None.gif        
< graduating_school > 东南大学 </ graduating_school >
None.gif        
< address > 南京市某某路******* </ address >
None.gif        
< email > jeo@sample.com </ email >
None.gif    
</ member >
None.gif    
< member >
None.gif        
< name > Katty </ name >
None.gif        
< sex > </ sex >
None.gif        
< birthday > 1982年1月18日 </ birthday >
None.gif        
< nationality > </ nationality >
None.gif        
< political_status > 团员 </ political_status >
None.gif        
< native_place > 安徽黄山 </ native_place >
None.gif        
< qualification > 本科 </ qualification >
None.gif        
< telephone > 025-8000000 </ telephone >
None.gif        
< mobile > 138138***** </ mobile >
None.gif        
< graduating_school > 南京理工大学 </ graduating_school >
None.gif        
< address > 南京市某某路******* </ address >
None.gif        
< email > Katty@sample.com </ email >
None.gif    
</ member >
None.gif    
< member >
None.gif        
< name > Scott </ name >
None.gif        
< sex > </ sex >
None.gif        
< birthday > 1981年4月14日 </ birthday >
None.gif        
< nationality > </ nationality >
None.gif        
< political_status > 团员 </ political_status >
None.gif        
< native_place > 山东烟台 </ native_place >
None.gif        
< qualification > 研究生 </ qualification >
None.gif        
< telephone > 025-8000000 </ telephone >
None.gif        
< mobile > 138138***** </ mobile >
None.gif        
< graduating_school > 南京航空航天大学 </ graduating_school >
None.gif        
< address > 南京市某某路******* </ address >
None.gif        
< email > scott@sample.com </ email >
None.gif    
</ member >
None.gif    
< member >
None.gif        
< name > Lily </ name >
None.gif        
< sex > </ sex >
None.gif        
< birthday > 1982年3月18日 </ birthday >
None.gif        
< nationality > </ nationality >
None.gif        
< political_status > 党员 </ political_status >
None.gif        
< native_place > 江苏常熟 </ native_place >
None.gif        
< qualification > 研究生 </ qualification >
None.gif        
< telephone > 025-8000000 </ telephone >
None.gif        
< mobile > 138138***** </ mobile >
None.gif        
< graduating_school > 南京大学 </ graduating_school >
None.gif        
< address > 南京市某某路******* </ address >
None.gif        
< email > Lily@sample.com </ email >
None.gif    
</ member >
None.gif
</ members >


程序使用.net 2.0/c#开发,代码(省略Design部分代码):
None.gif using  System;
None.gif
using  System.Collections.Generic;
None.gif
using  System.ComponentModel;
None.gif
using  System.Data;
None.gif
using  System.Drawing;
None.gif
using  System.Text;
None.gif
using  System.Windows.Forms;
None.gif
using  System.Xml;
None.gif
None.gif
namespace  ExportWPS
ExpandedBlockStart.gifContractedBlock.gif
dot.gif {
InBlock.gif    
public partial class Form1 : Form
ExpandedSubBlockStart.gifContractedSubBlock.gif    
dot.gif{
InBlock.gif        ET.Application objApp 
= null;
InBlock.gif        ET._Workbook objWorkBook 
= null;
InBlock.gif        ET.Worksheet objWorkSheet 
= null;
InBlock.gif
InBlock.gif        
public Form1()
ExpandedSubBlockStart.gifContractedSubBlock.gif        
dot.gif{
InBlock.gif            InitializeComponent();
ExpandedSubBlockEnd.gif        }

InBlock.gif
InBlock.gif        
private void button1_Click(object sender, EventArgs e)
ExpandedSubBlockStart.gifContractedSubBlock.gif        
dot.gif{
InBlock.gif            DateTime dt 
= DateTime.Now;
InBlock.gif
InBlock.gif            
try
ExpandedSubBlockStart.gifContractedSubBlock.gif            
dot.gif{
InBlock.gif                objApp 
= new ET.Application();
InBlock.gif
InBlock.gif                XmlDocument doc 
= new XmlDocument();
InBlock.gif                doc.Load(
@"c:\members.xml");
InBlock.gif
InBlock.gif                XmlElement root 
= doc.DocumentElement;
InBlock.gif                XmlNodeList nodes 
= root.SelectNodes("member");
InBlock.gif
InBlock.gif
InBlock.gif                
foreach (XmlElement memberElement in nodes)
ExpandedSubBlockStart.gifContractedSubBlock.gif                
dot.gif{
InBlock.gif                    ExportMember(memberElement);
ExpandedSubBlockEnd.gif                }

ExpandedSubBlockEnd.gif            }

InBlock.gif            
finally
ExpandedSubBlockStart.gifContractedSubBlock.gif            
dot.gif{
InBlock.gif                ReleaseComObject(objApp);
ExpandedSubBlockEnd.gif            }

InBlock.gif
InBlock.gif            TimeSpan ts 
= DateTime.Now - dt;
InBlock.gif            MessageBox.Show(ts.ToString());
ExpandedSubBlockEnd.gif        }

InBlock.gif
InBlock.gif        
private void ExportMember(XmlElement memberElement)
ExpandedSubBlockStart.gifContractedSubBlock.gif        
dot.gif{
InBlock.gif            
object missing = Type.Missing;
InBlock.gif            ET.Range objRange 
= null;
InBlock.gif
InBlock.gif            
try
ExpandedSubBlockStart.gifContractedSubBlock.gif            
dot.gif{
InBlock.gif
InBlock.gif                objWorkBook 
= objApp.Workbooks.Add(Type.Missing);
InBlock.gif                objWorkSheet 
= objWorkBook.ActiveSheet;
InBlock.gif                
InBlock.gif                
//设置标题
InBlock.gif
                objWorkSheet.get_Range("A1""G1").Merge(true);        //先进行单元合并
InBlock.gif
                objRange = objWorkSheet.get_Range("A1""A1");
InBlock.gif                objRange.Value2 
= "表 格 示 例";    //设置合并后的单元格的文本
InBlock.gif
                objRange.RowHeight = 40;        //设置行高
InBlock.gif                
//设置字体
InBlock.gif
                objRange.Font.Name = "宋体";
InBlock.gif                objRange.Font.Size 
= 20;
InBlock.gif                objRange.Font.Bold 
= true;
InBlock.gif                objRange.HorizontalAlignment 
= ET.ETHAlign.etHAlignCenter;    //设置字体对其方向
InBlock.gif

InBlock.gif                objRange 
= objWorkSheet.get_Range("A2""G7");
InBlock.gif                objRange.Borders.LineStyle 
= ET.ETLineStyle.etContinuous;
InBlock.gif                objRange.Borders.Weight 
= ET.ETBorderWeight.etThin;
InBlock.gif                objRange.RowHeight 
= 17;
InBlock.gif                objRange.Borders.Color 
= 0;        //设置边框的颜色,颜色的值可以按照B,G,R的方式合成
InBlock.gif                
//设置表格的外边框,加粗
InBlock.gif
                objRange.Borders[ET.ETBorderIndex.etEdgeBottom].Weight = ET.ETBorderWeight.etMedium;
InBlock.gif                objRange.Borders[ET.ETBorderIndex.etEdgeLeft].Weight 
= ET.ETBorderWeight.etMedium;
InBlock.gif                objRange.Borders[ET.ETBorderIndex.etEdgeRight].Weight 
= ET.ETBorderWeight.etMedium;
InBlock.gif                objRange.Borders[ET.ETBorderIndex.etEdgeTop].Weight 
= ET.ETBorderWeight.etMedium;
InBlock.gif                objRange.HorizontalAlignment 
= ET.ETHAlign.etHAlignCenter;
InBlock.gif                objRange.Font.Name 
= "宋体";
InBlock.gif                objRange.Font.Size 
= 10;
InBlock.gif
InBlock.gif                
string name = memberElement.SelectSingleNode("name").ChildNodes[0].Value;
InBlock.gif
InBlock.gif                objWorkSheet.get_Range(
"A2""A2").Value2 = "姓    名";
InBlock.gif                objWorkSheet.get_Range(
"A2""A2").ColumnWidth = 60;
InBlock.gif
InBlock.gif                objWorkSheet.get_Range(
"B2""B2").ColumnWidth = 75;
InBlock.gif                objWorkSheet.get_Range(
"B2""B2").Value2 = name;
InBlock.gif
InBlock.gif                objWorkSheet.get_Range(
"C2""C2").Value2 = "性    别";
InBlock.gif                objWorkSheet.get_Range(
"C2""C2").ColumnWidth = 60;
InBlock.gif
InBlock.gif                objWorkSheet.get_Range(
"D2""D2").ColumnWidth = 75;
InBlock.gif                objWorkSheet.get_Range(
"D2""D2").Value2 = memberElement.SelectSingleNode("sex").ChildNodes[0].Value;
InBlock.gif
InBlock.gif                objWorkSheet.get_Range(
"E2""E2").Value2 = "出生年月";
InBlock.gif                objWorkSheet.get_Range(
"E2""E2").ColumnWidth = 60;
InBlock.gif
InBlock.gif                objWorkSheet.get_Range(
"F2""F2").ColumnWidth = 75;
InBlock.gif                objWorkSheet.get_Range(
"F2""F2").Value2 = memberElement.SelectSingleNode("birthday").ChildNodes[0].Value;
InBlock.gif
InBlock.gif                objWorkSheet.get_Range(
"G2""G7").Merge(false);
InBlock.gif                objWorkSheet.get_Range(
"G2""G2").ColumnWidth = 80;
InBlock.gif                objWorkSheet.get_Range(
"G2""G2").Value2 = "照片";
InBlock.gif
InBlock.gif                objWorkSheet.get_Range(
"A3""A3").Value2 = "民    族";
InBlock.gif                objWorkSheet.get_Range(
"B3""B3").Value2 = memberElement.SelectSingleNode("nationality").ChildNodes[0].Value;
InBlock.gif
InBlock.gif                objWorkSheet.get_Range(
"C3""C3").Value2 = "政治面貌";
InBlock.gif                objWorkSheet.get_Range(
"D3""D3").Value2 = memberElement.SelectSingleNode("political_status").ChildNodes[0].Value;
InBlock.gif
InBlock.gif                objWorkSheet.get_Range(
"E3""E3").Value2 = "籍    贯";
InBlock.gif                objWorkSheet.get_Range(
"F3""F3").Value2 = memberElement.SelectSingleNode("native_place").ChildNodes[0].Value;
InBlock.gif
InBlock.gif                objWorkSheet.get_Range(
"A4""A4").Value2 = "学    历";
InBlock.gif                objWorkSheet.get_Range(
"B4""B4").Value2 = memberElement.SelectSingleNode("qualification").ChildNodes[0].Value;
InBlock.gif
InBlock.gif                objWorkSheet.get_Range(
"C4""C4").Value2 = "固定电话";
InBlock.gif                objWorkSheet.get_Range(
"D4""D4").Value2 = memberElement.SelectSingleNode("telephone").ChildNodes[0].Value;
InBlock.gif
InBlock.gif                objWorkSheet.get_Range(
"E4""E4").Value2 = "移动电话";
InBlock.gif                objWorkSheet.get_Range(
"F4""F4").Value2 = memberElement.SelectSingleNode("mobile").ChildNodes[0].Value;
InBlock.gif
InBlock.gif                objWorkSheet.get_Range(
"A5""A5").Value2 = "毕业院校";
InBlock.gif                objWorkSheet.get_Range(
"B5""F5").Merge(false);
InBlock.gif                objWorkSheet.get_Range(
"B5""B5").Value2 = memberElement.SelectSingleNode("graduating_school").ChildNodes[0].Value;
InBlock.gif
InBlock.gif                objWorkSheet.get_Range(
"A6""A6").Value2 = "家庭住址";
InBlock.gif                objWorkSheet.get_Range(
"B6""F6").Merge(false);
InBlock.gif                objWorkSheet.get_Range(
"B6""B6").Value2 = memberElement.SelectSingleNode("address").ChildNodes[0].Value;
InBlock.gif
InBlock.gif                objWorkSheet.get_Range(
"A7""A7").Value2 = "Email";
InBlock.gif                objWorkSheet.get_Range(
"B7""F7").Merge(false);
InBlock.gif                objWorkSheet.get_Range(
"B7""B7").Value2 = memberElement.SelectSingleNode("email").ChildNodes[0].Value;
InBlock.gif
InBlock.gif                objWorkBook.SaveAs(
string.Format("c:\\{0}.xls", name), missing, missing, missing, missing, missing, ET.ETSaveAsAccessMode.etExclusive, missing, missing, missing, missing);
InBlock.gif                objWorkBook.Close(missing, missing, missing);
ExpandedSubBlockEnd.gif            }

InBlock.gif            
finally
ExpandedSubBlockStart.gifContractedSubBlock.gif            
dot.gif{
InBlock.gif                ReleaseComObject(objRange);
InBlock.gif                ReleaseComObject(objWorkSheet);
InBlock.gif                ReleaseComObject(objWorkBook);
ExpandedSubBlockEnd.gif            }

ExpandedSubBlockEnd.gif        }

InBlock.gif
InBlock.gif        
private void ReleaseComObject(object obj)
ExpandedSubBlockStart.gifContractedSubBlock.gif        
dot.gif{
InBlock.gif            
if (obj != null)
ExpandedSubBlockStart.gifContractedSubBlock.gif            
dot.gif{
InBlock.gif                System.Runtime.InteropServices.Marshal.ReleaseComObject(obj);
InBlock.gif                obj 
= null;
ExpandedSubBlockEnd.gif            }

ExpandedSubBlockEnd.gif        }

ExpandedSubBlockEnd.gif    }

ExpandedBlockEnd.gif}

程序执行后,在c:\下生成10份xls文档。并且提示执行导出代码所使用的时间


总共花费5.5秒,应该说这个时间还是完全可以接受的。另外,导出的文件可以完全兼容MS Excel 2003

附一份使用上面的程序导出的文档: Jack.xls
完成的程序以及members.xml: ExportWPS.rar

转载于:https://www.cnblogs.com/scdsun/archive/2007/03/20/681326.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值