• C#读写Excel


    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.IO;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Windows.Forms;
    using Microsoft.Office;
    using Microsoft.Office.Interop.Excel;
    using System.IO;
    using System.Reflection;
    using System.Data;
    using System.Data.OleDb;
    
    namespace ExcelDemo
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
                OutLog("**************欢迎使用**************");
            }
    
            private void button1_Click(object sender, EventArgs e)
            {
                OpenFileDialog open = new OpenFileDialog();
                //定义一个文件打开控件
                OpenFileDialog ofd = new OpenFileDialog();
                //设置打开对话框的初始目录,默认目录为exe运行文件所在的路径
                //ofd.InitialDirectory = Application.StartupPath;
                //设置打开对话框的标题
                ofd.Title = "请选择要打开的文件";
                //设置打开对话框可以多选
                ofd.Multiselect = true;
                //设置对话框打开的文件类型
                ofd.Filter = "excel03文件(*.xls)|*.xls|excel07文件(*.xlsx)|*.xlsx";
                //设置文件对话框当前选定的筛选器的索引
                ofd.FilterIndex = 2;
                //设置对话框是否记忆之前打开的目录
                ofd.RestoreDirectory = true;
    
                if (ofd.ShowDialog() == DialogResult.OK)
                {
                    //获取用户选择的文件完整路径
                    string[] filePath = ofd.FileNames;
                    //获取对话框中所选文件的文件名和扩展名,文件名不包括路径
                    string[] fileName = ofd.SafeFileNames;
                    for (int i = 0; i < fileName.Length; i++)
                    {
                        OutLog("用户选择的文件目录为:" + filePath[i]);
                        OutLog("用户选择的文件名称为:" + fileName[i]);
                        checkedListBox1.Items.Add(filePath[i], true);
                    }
    
                    //OutLog("**************选中文件的内容**************");
                    //using (FileStream fsRead = new FileStream(filePath, FileMode.OpenOrCreate, FileAccess.Read))
                    //{
                    //    //定义二进制数组
                    //    byte[] buffer = new byte[1024 * 1024 * 5];
                    //    //从流中读取字节
                    //    int r = fsRead.Read(buffer, 0, buffer.Length);
                    //    OutLog(Encoding.Default.GetString(buffer, 0, r));
                    //}
                }
    
            }
            /// <summary>
            /// 输出日志
            /// </summary>
            /// <param name="strLog"></param>
            private void OutLog(string strLog)
            {
                //如果日志信息长度超过1000行,则自动清空
                if (txt_FileInfo.GetLineFromCharIndex(txt_FileInfo.Text.Length) > 1000)
                {
                    //清空文本
                    txt_FileInfo.Clear();
                }
                txt_FileInfo.AppendText(DateTime.Now.ToString("HH:mm:ss ") + strLog + "
    ");
            }
    
            private void linkLabel1_Click(object sender, EventArgs e)
            {
                for (int i = 0; i < checkedListBox1.Items.Count; i++)
                {
                    checkedListBox1.SetItemCheckState(i, CheckState.Checked);
                }
            }
    
            private void linkLabel2_Click(object sender, EventArgs e)
            {
                for (int i = 0; i < checkedListBox1.Items.Count; i++)
                {
                    checkedListBox1.SetItemCheckState(i, CheckState.Unchecked);
                }
            }
    
            private void button2_Click(object sender, EventArgs e)
            {
                OutLog("准备中...");
                #region init
                string path = @"D:" + DateTime.Now.Second + DateTime.Now.Millisecond + ".xlsx";
                System.Data.DataTable MyDataTable = new System.Data.DataTable();
                MyDataTable.Columns.Add(new DataColumn("存档编号", typeof(string)));
                MyDataTable.Columns.Add(new DataColumn("任务描述", typeof(string)));
                MyDataTable.Columns.Add(new DataColumn("具体位置", typeof(string)));
                MyDataTable.Columns.Add(new DataColumn("开始时间", typeof(string)));
                MyDataTable.Columns.Add(new DataColumn("结束时间", typeof(string)));
                MyDataTable.Columns.Add(new DataColumn("工作情况", typeof(string)));
                MyDataTable.Columns.Add(new DataColumn("名称1", typeof(string)));
                MyDataTable.Columns.Add(new DataColumn("型号1", typeof(string)));
                MyDataTable.Columns.Add(new DataColumn("数量1", typeof(string)));
                MyDataTable.Columns.Add(new DataColumn("名称2", typeof(string)));
                MyDataTable.Columns.Add(new DataColumn("型号2", typeof(string)));
                MyDataTable.Columns.Add(new DataColumn("数量2", typeof(string)));
                MyDataTable.Columns.Add(new DataColumn("名称3", typeof(string)));
                MyDataTable.Columns.Add(new DataColumn("型号3", typeof(string)));
                MyDataTable.Columns.Add(new DataColumn("数量3", typeof(string)));
                MyDataTable.Columns.Add(new DataColumn("名称4", typeof(string)));
                MyDataTable.Columns.Add(new DataColumn("型号4", typeof(string)));
                MyDataTable.Columns.Add(new DataColumn("数量4", typeof(string)));
                #endregion
                DataRow dr;
                List<string[]> lstrs = new List<string[]>();
                for (int i = 0; i < checkedListBox1.Items.Count; i++)
                {
                    string[] str = new string[18];
                    System.Data.DataTable dt = ExcelToDS(checkedListBox1.Items[i].ToString());
                    //string IDCard =       dt.Rows[0][2].ToString();
                    //string miaoshu =      dt.Rows[3][0].ToString();
                    //string Position =     dt.Rows[4][0].ToString();
                    //string StartTime =    dt.Rows[5][0].ToString();
                    //string OverTime =     dt.Rows[5][2].ToString();
                    //string Qingkuang =    dt.Rows[6][0].ToString();
                    //string name_1 =       dt.Rows[8][0].ToString();
                    //string Type_1 =       dt.Rows[8][1].ToString();
                    //string Num_1 =        dt.Rows[8][4].ToString();
                    //string name_2 =       dt.Rows[9][0].ToString();
                    //string Type_2 =       dt.Rows[9][1].ToString();
                    //string Num_2 =        dt.Rows[9][4].ToString();
                    //string name_3 =       dt.Rows[10][0].ToString();
                    //string Type_3 =       dt.Rows[10][1].ToString();
                    //string Num_3 =        dt.Rows[10][4].ToString();
                    //string name_4 =       dt.Rows[11][0].ToString();
                    //string Type_4 =       dt.Rows[11][1].ToString();
                    //string Num_4 =        dt.Rows[11][4].ToString();
                    str[0] = dt.Rows[0][2].ToString().Split('')[1] + ".";
                    str[1] = dt.Rows[3][0].ToString().Split('')[1];
                    str[2] = dt.Rows[4][0].ToString().Split('')[1];
                    str[3] = dt.Rows[5][0].ToString().Split('')[1];
                    str[4] = dt.Rows[5][2].ToString().Split('')[1];
                    str[5] = dt.Rows[6][0].ToString().Split('')[1];
                    str[6] = dt.Rows[8][0].ToString().Split('')[1];
                    str[7] = dt.Rows[8][1].ToString().Split('')[1];
                    str[8] = dt.Rows[8][4].ToString().Split('')[1];
                    str[9] = dt.Rows[9][0].ToString().Split('')[1];
                    str[10] = dt.Rows[9][1].ToString().Split('')[1];
                    str[11] = dt.Rows[9][4].ToString().Split('')[1];
                    str[12] = dt.Rows[10][0].ToString().Split('')[1];
                    str[13] = dt.Rows[10][1].ToString().Split('')[1];
                    str[14] = dt.Rows[10][4].ToString().Split('')[1];
                    str[15] = dt.Rows[11][0].ToString().Split('')[1];
                    str[16] = dt.Rows[11][1].ToString().Split('')[1];
                    str[17] = dt.Rows[11][4].ToString().Split('')[1];
                    //DataRow dr = new System.Data.DataRow();
                    //dr = MyDataTable.NewRow();
                    //dr["存档编号"] = IDCard;
                    //dr["任务描述"] = miaoshu;
                    //dr["具体位置"] = Position;
                    //dr["开始时间"] = StartTime;
                    //dr["结束时间"] = OverTime;
                    //dr["工作情况"] = Qingkuang;
                    //dr["名称1"] = name_1;
                    //dr["型号1"] = Type_1;
                    //dr["数量1"] = Num_1;
                    //dr["名称2"] = name_2;
                    //dr["型号2"] = Type_2;
                    //dr["数量2"] = Num_2;
                    //dr["名称3"] = name_3;
                    //dr["型号3"] = Type_3;
                    //dr["数量3"] = Num_3;
                    //dr["名称4"] = name_4;
                    //dr["型号4"] = Type_4;
                    //dr["数量4"] = Num_4;
                    //MyDataTable.Rows.Add(dr);
                    lstrs.Add(str);
                }
                CreateExcelFile(path, lstrs);
                OutLog("准备完成!开始添加");
                DataSet ds = new System.Data.DataSet();
                ds.Tables.Add(MyDataTable);
                OutLog("OK,处理完成,文件路径:" + path);
            }
            public System.Data.DataTable ExcelToDS(string Path)
            {
                string strConn = "Provider=Microsoft.Jet.OLEDB.4.0;" + "Data Source=" + Path + ";" + "Extended Properties=Excel 8.0;";
                OleDbConnection conn = new OleDbConnection(strConn);
                conn.Open();
                string strExcel = "";
                OleDbDataAdapter myCommand = null;
                DataSet ds = null;
                strExcel = "select * from [sheet1$]";
                myCommand = new OleDbDataAdapter(strExcel, strConn);
                ds = new DataSet();
                myCommand.Fill(ds, "table1");
                return ds.Tables[0];
            }
            public string CreateNewExcel()
            {
                string path = "D:/" + DateTime.Now.Second + DateTime.Now.Millisecond + ".xlsx";
                if (!File.Exists(path))
                {
                    File.Create(path).Close();
                }
                OutLog("创建Excel文件,路径:" + path);
                return path;
            }
            public void DSToExcel(string Path, DataSet oldds)
            {
                //先得到汇总EXCEL的DataSet 主要目的是获得EXCEL在DataSet中的结构 
                string strCon = " Provider = Microsoft.Jet.OLEDB.4.0 ; Data Source =" + Path + ";Extended Properties=Excel 8.0";
                OleDbConnection myConn = new OleDbConnection(strCon);
                string strCom = "select * from [Sheet1$]";
                myConn.Open();
                OleDbDataAdapter myCommand = new OleDbDataAdapter(strCom, myConn);
                System.Data.OleDb.OleDbCommandBuilder builder = new OleDbCommandBuilder(myCommand);
                //QuotePrefix和QuoteSuffix主要是对builder生成InsertComment命令时使用。 
                builder.QuotePrefix = "[";     //获取insert语句中保留字符(起始位置) 
                builder.QuoteSuffix = "]"; //获取insert语句中保留字符(结束位置) 
                //DataSet newds = new DataSet();
                myCommand.Fill(oldds, "Table1");
    
                //for (int i = 0; i < oldds.Tables[0].Rows.Count; i++)
                //{
                //    //在这里不能使用ImportRow方法将一行导入到news中,因为ImportRow将保留原来DataRow的所有设置(DataRowState状态不变)。在使用ImportRow后newds内有值,但不能更新到Excel中因为所有导入行的DataRowState!=Added 
                //    DataRow nrow = newds.Tables["Table1"].NewRow();
                //    for (int j = 0; j < newds.Tables[0].Columns.Count; j++)
                //    {
                //        nrow[j] = oldds.Tables[0].Rows[i][j];
                //    }
                //    newds.Tables["Table1"].Rows.Add(nrow);
                //}
                myCommand.Update(oldds, "Table1");
                myConn.Close();
            }
            public static void CreateExcelFile(string FileName, List<string[]> uu)
            {
                if (FileName.Split('.')[FileName.Split('.').Length - 1] == "xlsx")//如果是2007版以后
                {
                    //create
                    object Nothing = System.Reflection.Missing.Value;
                    var app = new Microsoft.Office.Interop.Excel.Application();
                    app.Visible = false;
                    Microsoft.Office.Interop.Excel.Workbook workBook = app.Workbooks.Add(Nothing);
                    Microsoft.Office.Interop.Excel.Worksheet worksheet = (Microsoft.Office.Interop.Excel.Worksheet)workBook.Sheets[1];
                    worksheet.Name = "Sheet1";
                    //headline
                    //int i = 1;
                    //for (int i = 0; i < uu.Length; i++)
                    //{
                    //    worksheet.Cells[RowNum + 1, i + 1] = uu[i];
                    //}
                    worksheet.Cells[1, 1] = "存档编号";
                    worksheet.Cells[1, 2] = "任务描述";
                    worksheet.Cells[1, 3] = "具体位置";
                    worksheet.Cells[1, 4] = "开始时间";
                    worksheet.Cells[1, 5] = "结束时间";
                    worksheet.Cells[1, 6] = "工作情况";
                    worksheet.Cells[1, 7] = "名称1";
                    worksheet.Cells[1, 8] = "型号1";
                    worksheet.Cells[1, 9] = "数量1";
                    worksheet.Cells[1, 10] = "名称2";
                    worksheet.Cells[1, 11] = "型号2";
                    worksheet.Cells[1, 12] = "数量2";
                    worksheet.Cells[1, 13] = "名称3";
                    worksheet.Cells[1, 14] = "型号3";
                    worksheet.Cells[1, 15] = "数量3";
                    worksheet.Cells[1, 16] = "名称4";
                    worksheet.Cells[1, 17] = "型号4";
                    worksheet.Cells[1, 18] = "数量4";
                    for (int i = 0; i < uu.Count; i++)
                    {
                        for (int j = 0; j < uu[i].Length; j++)
                        {
                            worksheet.Cells[i + 2, j + 1] = uu[i][j];
                        }
                    }
                    //foreach (UUser uu in luu)
                    //{
    
                    //    worksheet.Cells[1, i] = uu.name;
                    //    i++;
                    //}
    
    
                    worksheet.SaveAs(FileName, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Microsoft.Office.Interop.Excel.XlSaveAsAccessMode.xlNoChange, Type.Missing, Type.Missing, Type.Missing);
                    workBook.Close(false, Type.Missing, Type.Missing);
                    app.Quit();
                }
                //else
                //{
                //    HSSFWorkbook wk = new HSSFWorkbook();            //创建一个名称为mySheet的表
                //    ISheet tb = wk.CreateSheet("Sheet1");
                //    //创建一行,此行为第二行
                //    IRow row = tb.CreateRow(1);
                //    for (int i = 0; i < luu.Count; i++)
                //    {
                //        ICell cell = row.CreateCell(i);  //在第二行中创建单元格
                //        cell.SetCellValue(luu[i].name);//循环往第二行的单元格中添加数据            }       
                //        using (FileStream fs = File.OpenWrite(FileName))
                //        {
                //            wk.Write(fs);   //向打开的这个xls文件中写入mySheet表并保存。
    
                //        }
                //    }
    
    
    
    
    
                //}
            }
        }
    
    }
  • 相关阅读:
    贪心-poj-3040-Allowance
    [置顶] .net技术类面试、笔试题汇总3
    数据对接—kettle使用之二
    做好先期工作,才能有效沟通
    cc++复习基础要点08--c++单例模式
    android 限制adb的访问目录
    我奋斗18年,和你或者咖啡没有任何关系
    (3)选择元素——(15)总结(Summary)
    (3)选择元素——(16)延伸阅读(Further reading)
    网络协议复习
  • 原文地址:https://www.cnblogs.com/caijiabao/p/10368351.html
Copyright © 2020-2023  润新知