C#數據轉換實現EXCEL到TXT文檔
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;
- }
- }
- }
本文來自yangshun2008的CSDN博客文章《C#實現EXCEL數據轉換到TXT文檔》
【編輯推薦】