在许多业务系统中,越来越多的碰到业务流的数据集成,综合,再利用的一系列问题。特别是跨业务领域的多个系统可能需要数据共享或者数据整合。另外,许多原有系统在短期内不可能接受原有业务数据格式的变革性标准化,而且也面临着相当多的技术与人为因素,因此,将不同各式的数据变换到统一的目标格式下进行操作是比将强迫接受数据格式标准化折衷的考虑。
在公司里有许多复杂的文档是基于XLS的,特别是需求,设计领域的许多细节。这些基于XLS的文档对于数据的自动化处理是相当棘手的,因此考虑将其转换成XML或者其他标准的数据格式。在这边我收集了一些关于数据格式的转换的一些代码。希望能对大家编写自动化工具有所用处。
个人觉得第二种方法对于处理数据更加有效一些,通过XSLT将原有数据的形式进行进一步的改变来适应特定的应用的需求。第一种方法则需要在代码中去进行处理。
====================================================================================
1.将DBF,XLS,XML,MDB文件导入C#DataGrid的方法
作者:杨忠勋
专业:计算机软件开发及应用
语言能力:TOFEL633 GRE2140
Email:zhongxunyang@yahoo.com.cn
以下的源码里分别给出了将DBF,XLS,XML,MDB文件导入C#DataGrid的方法,供各位参考。
//PutInDataSet.cs的源码
using System;
using System.Data.Odbc;
using System.Data.OleDb;
using System.Data;
using System.Collections;
namespace PutInDataSet
{
/// <summary>
/// DataSetTransIn 的摘要说明。
/// </summary>
public class PutInDataSet
{
/// <summary>
/// 传入的文件变量
/// </summary>
private DataSet my_Ds;//存放文件的数据集
private string my_Err;//错误信息
private string my_TableName;//传入的文件名
private TableType my_TableType;//传入的文件类型
private string my_TablePath;//传入的文件路径
private int my_TableIndex;//表的索引
OleDbCommandBuilder my_Builder;//命令串
/// <summary>
/// 数据库连接变量
/// </summary>
private string my_StrConnection;//连接字符串
private string my_StrSelect;//select语句
/// <summary>
/// 可以处理的文件类型
/// </summary>
public enum TableType
{
MDB,XLS,DBF,DOC,TXT,XML,HTML
}
public PutInDataSet(string TablePath,string TableName,TableType TableType)
{
///<summary>
///获得传入的路径,文件名及文件类型;
///</summary>
this.my_TablePath=TablePath;//路径
this.my_TableName=TableName;//文件名
this.my_TableType=TableType;//文件类型
}
public DataSet Convert()
{
DataSet iRtn_Ds=new DataSet();
switch (this.my_TableType)
{
case TableType.DBF:
iRtn_Ds = this.DbfToDs();
break;
case TableType.MDB:
iRtn_Ds = this.MdbToDs();
break;
case TableType.XLS:
iRtn_Ds = this.XlsToDs();
break;
case TableType.XML:
iRtn_Ds = this.XmlToDs();
break;
}
return iRtn_Ds;
}
///<summary>
///将DBF文件放入DataSet
///</summary>
private DataSet DbfToDs()
{
//数据库连接定义
OdbcConnection my_conn; //数据连接
OdbcDataAdapter my_Adapter;//数据适配器
//数据库连接
this.my_StrConnection= "Driver={Microsoft Visual FoxPro Driver};SourceType=DBF;SourceDB=" + this.my_TablePath;
this.my_StrSelect="SELECT * FROM " + this.my_TableName;
my_conn = new OdbcConnection(this.my_StrConnection);
my_conn.Open();
my_Adapter = new OdbcDataAdapter(this.my_StrSelect,my_conn);
this.my_Ds=new DataSet();
//填充数据集
my_Adapter.Fill(this.my_Ds,this.my_TableName);
return this.my_Ds;
}
///<summary>
///将MDB文件放入DataSet
///</summary>
private DataSet MdbToDs()
{
//数据库连接定义
OleDbConnection my_conn;
OleDbDataAdapter my_Adapter;
//数据库连接
this.my_StrConnection= "Provider=Microsoft.JET.OLEDB.4.0;data source=" + this.my_TablePath;
this.my_StrSelect="SELECT * FROM " + this.my_TableName;
my_conn = new OleDbConnection(this.my_StrConnection);
my_conn.Open();
my_Adapter = new OleDbDataAdapter(this.my_StrSelect,my_conn);
this.my_Ds=new DataSet();
//填充数据集
my_Adapter.Fill(this.my_Ds,this.my_TableName);
return this.my_Ds;
}
///<summary>
///将XML文件放入DataSet
///</summary>
private DataSet XmlToDs()
{
//填充数据集
this.my_Ds=new DataSet();
this.my_Ds.ReadXml(this.my_TablePath+this.my_TableName,XmlReadMode.ReadSchema);
this.my_Ds.DataSetName="XmlData";
return this.my_Ds;
}
///<summary>
///将Excel文件放入DataSet
///</summary>
private DataSet XlsToDs()
{
OleDbConnection my_conn;
OleDbDataAdapter my_Adapter;
//数据库连接
this.my_StrConnection= "Provider=Microsoft.JET.OLEDB.4.0;Extended Properties=Excel 8.0;data source="+this.my_TablePath+this.my_TableName;
this.my_StrSelect="SELECT * FROM [SHEET1$]";
my_conn = new OleDbConnection(this.my_StrConnection);
my_conn.Open();
my_Adapter = new OleDbDataAdapter(this.my_StrSelect,my_conn);
this.my_Builder=new OleDbCommandBuilder(my_Adapter);
this.my_Ds=new DataSet();
//填充数据集
my_Adapter.Fill(this.my_Ds,"ExcelData");
return this.my_Ds;
}
}
}
====================================================================================
Xsl是一种可扩展的样式表语言,通过他描述可快速的将DataSet转换成Excel文件,具体操作如下:
步骤一:
设计Xsl文件内容
<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:template match="/">
<Workbook xmlns="urn:schemas-microsoft-com:office:spreadsheet" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet" xmlns:html="http://www.w3.org/tr/rec-html40">
<Worksheet ss:Name="mypage">
<Table>
<Row>
<Cell>
<Data ss:Type="String">姓名</Data>
</Cell>
<Cell>
<Data ss:Type="String">证件号</Data>
</Cell>
<Cell>
<Data ss:Type="String">银行卡号</Data>
</Cell>
<Cell>
<Data ss:Type="String">审核标志</Data>
</Cell>
</Row>
<xsl:for-each select="//Table">
<Row>
<Cell>
<Data ss:Type="String">
<xsl:value-of select="UserName"/>
</Data>
</Cell>
<Cell>
<Data ss:Type="String">
<xsl:value-of select="CertID"/>
</Data>
</Cell>
<Cell>
<Data ss:Type="String">
<xsl:value-of select="BankID"/>
</Data>
</Cell>
<Cell>
<Data ss:Type="String">
<xsl:value-of select="CheckTypeName"/>
</Data>
</Cell>
</Row>
</xsl:for-each>
</Table>
</Worksheet>
</Workbook>
</xsl:template>
</xsl:stylesheet>
步骤二:
代码部分
XmlDocument doc = new XmlDocument();
doc.LoadXml(ds.GetXml());
XPathNavigator nav = doc.DocumentElement.CreateNavigator();
XmlTextWriter writer = new XmlTextWriter("c://fileName.xls", null);
writer.WriteProcessingInstruction("xml", "version=/"1.0/"");
XslTransform transform = new XslTransform();
transform.Load("xsl文件路径");
transform.Transform(nav, null, writer, null);
writer.Close();
MessageBox.Show("导出成功!", "系统提示",
MessageBoxButtons.OK, MessageBoxIcon.Information);
====================================================================================