C#数据转换前excel中的数据格式如下: 设备名称 规格型号 设备编号 使用部门 固定资产编号 电脑1 IBM5660 10001 管理部 100010001 电脑2 IBM5661 10002 研发部 100010002 电脑3 IBM5662 10003 管理部 100010003 C#数据转换到TXT文档的格式: "检测设备资产标签","设备名称","电脑1","规格型号","IBM5660","设备编号","10001","使用部门","管理部","固定资产编号","100010001" "检测设备资产标签","设备名称","电脑2","规格型号","IBM5661","设备编号","10002","使用部门","研发部","固定资产编号","100010002" "检测设备资产标签","设备名称","电脑3","规格型号","IBM5662","设备编号","10003","使用部门","管理部","固定资产编号","100010003" end
页面设计代码:
namespace ExcelToTxt { partial class Form1 { /// <summary> /// 必需的设计器变量。 /// </summary> private System.ComponentModel.IContainer components = null;
/// <summary> /// 清理所有正在使用的资源。 /// </summary> /// <param name="disposing">如果应释放托管资源,为 true;否则为 false。</param> protected override void Dispose(bool disposing) { if (disposing && (components != null)) { components.Dispose(); } base.Dispose(disposing); }
#region Windows 窗体设计器生成的代码
/// <summary> /// 设计器支持所需的方法 - 不要 /// 使用代码编辑器修改此方法的内容。 /// </summary> private void InitializeComponent() { this.dgvShow = new System.Windows.Forms.DataGridView(); this.btnSelect = new System.Windows.Forms.Button(); this.btnChange = new System.Windows.Forms.Button(); ((System.ComponentModel.ISupportInitialize)(this.dgvShow)).BeginInit(); this.SuspendLayout(); // // dgvShow // this.dgvShow.AllowUserToAddRows = false; this.dgvShow.AllowUserToDeleteRows = false; this.dgvShow.AllowUserToResizeRows = false; this.dgvShow.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; this.dgvShow.Dock = System.Windows.Forms.DockStyle.Top; this.dgvShow.Location = new System.Drawing.Point(0, 0); this.dgvShow.Name = "dgvShow"; this.dgvShow.RowTemplate.Height = 23; this.dgvShow.Size = new System.Drawing.Size(885, 600); this.dgvShow.TabIndex = 0; // // btnSelect // this.btnSelect.Location = new System.Drawing.Point(202, 611); this.btnSelect.Name = "btnSelect"; this.btnSelect.Size = new System.Drawing.Size(148, 23); this.btnSelect.TabIndex = 1; this.btnSelect.Text = "选择excel文件"; this.btnSelect.UseVisualStyleBackColor = true; this.btnSelect.Click += new System.EventHandler(this.btnSelect_Click); // // btnChange // this.btnChange.Location = new System.Drawing.Point(403, 611); this.btnChange.Name = "btnChange"; this.btnChange.Size = new System.Drawing.Size(152, 23); this.btnChange.TabIndex = 2; this.btnChange.Text = "转换为txt文档"; this.btnChange.UseVisualStyleBackColor = true; this.btnChange.Click += new System.EventHandler(this.btnChange_Click); // // Form1 // this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.ClientSize = new System.Drawing.Size(885, 646); this.Controls.Add(this.btnChange); this.Controls.Add(this.btnSelect); this.Controls.Add(this.dgvShow); this.Name = "Form1"; this.Text = "文件转换"; ((System.ComponentModel.ISupportInitialize)(this.dgvShow)).EndInit(); this.ResumeLayout(false);
}
#endregion
private System.Windows.Forms.DataGridView dgvShow; private System.Windows.Forms.Button btnSelect; private System.Windows.Forms.Button btnChange; } }
C#数据转换实现代码:
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Data.OleDb; using System.Drawing; using System.Text; using System.Windows.Forms; using System.IO;
namespace ExcelToTxt { public partial class Form1 : Form { private DataTable dt; //存储EXCLE中的数据
public Form1() { InitializeComponent(); this.btnChange.Enabled = false;//初始化设置控件为不可用 }
/// <summary> /// 该方法打开一个Excel文件 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void btnSelect_Click(object sender, EventArgs e) { string excelFilePath = ""; //存储打开的文件的路径
OpenFileDialog selectFile = new OpenFileDialog();
//选择打开的文件设置 selectFile.Filter = "Excel(*.xls)|*.xls"; selectFile.FilterIndex = 1; selectFile.DefaultExt = "xls"; selectFile.AddExtension = true; selectFile.RestoreDirectory = true; selectFile.Multiselect = false;
//选择文件 if (selectFile.ShowDialog() == DialogResult.OK) { excelFilePath = selectFile.FileName;//获取选择的文件路径 } else { return; }
//得到控件的数据源 dt = GetExcelData(excelFilePath);
//在显示控件中显示数据 ShowDataGridView();
//设置转换格式的控件可用 this.btnChange.Enabled = true; }
/// <summary> ///该方法将选择的EXCEL文件转换成TXT文档 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void btnChange_Click(object sender, EventArgs e) { string txtFilePath = "";//存储选择的TXT文档的文件名 SaveFileDialog saveTxtFile = new SaveFileDialog();
//选择保存的文件设置 saveTxtFile.Filter = "Text(.txt)|*.txt"; saveTxtFile.FilterIndex = 1; saveTxtFile.DefaultExt = "txt"; saveTxtFile.AddExtension = true; saveTxtFile.RestoreDirectory = true; saveTxtFile.OverwritePrompt = true;
//选择创建文件的文件夹 if (saveTxtFile.ShowDialog() == DialogResult.OK) { txtFilePath = saveTxtFile.FileName; //获取选择的文件路径 } else { return; }
//将DataTable中的文件写入到txt文档中 Cursor.Current = Cursors.WaitCursor; //设置鼠标状态 int dtcols = dt.Columns.Count; StringBuilder sbtxtdata = new StringBuilder(); ; //临时存储从dt中读出的每一条数据
//先创建一个新的TXT文档 FileStream fsTxtFile = new FileStream(txtFilePath, FileMode.CreateNew, FileAccess.Write); StreamWriter swTxtFile = new StreamWriter(fsTxtFile, Encoding.GetEncoding("gb2312") );
if (dtcols > 3) { string[] tempstr = new string[11];
//设置固定的值 tempstr[0] = "\"" + "检测设备资产标签" + "\"" + ","; tempstr[1] = "\"" + "设备名称" + "\"" + ","; tempstr[3] = "\"" + "规格型号" + "\"" + ","; tempstr[5] = "\"" + "设备编号" + "\"" + ","; tempstr[7] = "\"" + "使用部门" + "\"" + ","; tempstr[9] = "\"" + "固定资产编号" + "\"" + ",";
//标签2的格式写入Txt文档 for(int rows = 0; rows < dt.Rows.Count; rows++) { for (int cols = 0; cols < dt.Columns.Count; cols++) { int tempindex = 2*(cols+1); tempstr[tempindex] = "\"" + dt.Rows[rows][cols].ToString() + "\""; }
tempstr[2] = tempstr[2] + ","; tempstr[4] = tempstr[4] + ","; tempstr[6] = tempstr[6] + ","; tempstr[8] = tempstr[8] + ","; tempstr[10] = tempstr[10] + "\r\n";
//将本行数据写入缓冲区 foreach (string str in tempstr) { sbtxtdata.Append(str); } swTxtFile.Write(sbtxtdata);
//清空本行中的数据 sbtxtdata.Remove(0, sbtxtdata.Length);
//将数组中新添加的数据清空 for (int i = 0; i < dt.Columns.Count; i++) { int tempindex = 2*(i+1); tempstr[tempindex] = ""; } } } else { string[] tempstr = new string[5]; //标签0或1的格式写入Txt文档 for (int rows = 0; rows < dt.Rows.Count; rows++) { for (int cols = 0; cols < dt.Columns.Count; cols++) { string temp = "";//临时存储当前时间
if (cols == 0) { tempstr[0] = "\"" + dt.Rows[rows][cols] + "\"" + ","; } else if (cols == 1) { temp = dt.Rows[rows][cols].ToString(); tempstr[1] = "\"" + temp.Substring(0, 4) + "\"" + ","; //截取年 tempstr[2] = "\"" + temp.Substring(4, 2) + "\"" + ","; //截取月 tempstr[3] = "\"" + temp.Substring(6, 2) + "\"" + ","; //截取日 } else if (cols == 2) { tempstr[4] = "\"" + dt.Rows[rows][cols] + "\"" + "\r\n"; } }
//将本行数据写入缓冲区 foreach (string str in tempstr) { sbtxtdata.Append(str); } swTxtFile.Write(sbtxtdata);
//清空本行中的数据 sbtxtdata.Remove(0, sbtxtdata.Length);
//将数组中新添加的数据清空 for (int i = 0; i < dt.Columns.Count; i++) { tempstr[i] = ""; } } }
//将数据写入文档 swTxtFile.Write("end"); swTxtFile.Flush(); swTxtFile.Close(); fsTxtFile.Close();
//重新设置鼠标格式 Cursor.Current = Cursors.Default; MessageBox.Show("文件转换成功!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information); }
/// <summary> /// 获取Excel文件中的数据 /// </summary> /// <param name="path">Excel文件的路径</param> /// <returns>DataTable:将Excel文件的数据加载到DataTable中</returns> private DataTable GetExcelData(string path) { //连接字符串确定 string excelstr = "Provider = Microsoft.Jet.OLEDB.4.0;" + "Data Source= " + path + " ;" + " Extended Properties = Excel 8.0;";
OleDbConnection excelConn = new OleDbConnection(excelstr);
//打开数据源连接 try { if (excelConn.State == ConnectionState.Closed) { excelConn.Open(); } } catch (Exception ex) { MessageBox.Show("打开数据源连接失败!", "错误", MessageBoxButtons.OK, MessageBoxIcon.Error); Application.Exit(); } finally { if(excelConn.State == ConnectionState.Open) excelConn.Close(); }
//设置查询命令 OleDbDataAdapter myCommand = new OleDbDataAdapter("SELECT * FROM [Sheet1$]", excelConn); DataSet ds = new DataSet();
//执行该查询EXCEL表的命令 try { myCommand.Fill(ds, "excelTable"); } catch (Exception ex) { MessageBox.Show("该Excel文件的工作表的名字不是[Sheet1$]!", "错误", MessageBoxButtons.OK, MessageBoxIcon.Error); Application.Exit(); } finally { if (excelConn.State == ConnectionState.Closed) { excelConn.Close(); } }
//判断DataTable中是否有数据 if (ds.Tables["excelTable"].Rows.Count > 0) { return ds.Tables["excelTable"]; } else { MessageBox.Show("没有读到Excel表中的数据!", "错误", MessageBoxButtons.OK, MessageBoxIcon.Error); return null; } }
/// <summary> /// 将选择的excel表中的数据现在DataGridView中 /// </summary> private void ShowDataGridView() { //设置显示控件的样式 this.dgvShow.DefaultCellStyle.BackColor = Color.Beige; this.dgvShow.DefaultCellStyle.Font = new Font("Tahoma", 12);
DataGridViewCellStyle highlightCellStyle = new DataGridViewCellStyle(); highlightCellStyle.BackColor = Color.Red;
DataGridViewCellStyle currencyCellStyle = new DataGridViewCellStyle(); currencyCellStyle.Format = "C"; currencyCellStyle.ForeColor = Color.Green;
//设置显示控件的数据源 dgvShow.DataSource = dt; }
} }
|
请发表评论