您当前的位置:首页 > 计算机 > 编程开发 > .net

c# excel工作表及cell读取

时间:04-17来源:作者:点击数:

昨天晚上做了一回雷锋,帮朋友写了个程序,把他2天都未整理好的Excel数据,一个小时搞定。大致如下:我朋友是搞质检的,每天都会产生一个excel文件,每个excel文件都有20来个工作表,他要做的事情是把每个文件的每个工作表的其中6个单元格数据提取出来产生excel台账。悲哀的是,他要处理将近12个月的数据,累计300多个excel文件,估计他已经抓狂了。无奈,我用C#给他写了个excel工作表及cell读取的程序,因为只是他用,读取工作表的那些cell都写死了,没写成可配置。

处理如下:

1)文件夹excel文件遍历

每个月的excel文件都存放在一个目录中,如201001,因此,我要读取该目录,并遍历出该目录的所有excel文件,当然读取哪个目录,他自己指定。

2)excel工作表读取

由于每个excel文件都有10到20个工作表,因此需要遍历读取没个工作表的指定cell信息。

3)excel工作表单元格读取

4)读取到的单元格信息汇总成行输出

简单起见,每个工作表的所有cell值输出成一行,并以/t分隔开,每行结尾输出换行符/r/n,输出到文本框控件。这样我朋友只要复制文本框中的所有信息到excel即可。

5)当然为了告知当前已经处理到指定目录的哪个excel文件,添加了一个进度条

界面如下:

代码如下:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.IO;
using Excel;
using System.Reflection;
 
namespace jiangbt
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
 
        //文件夹设置
        private void button1_Click(object sender, EventArgs e)
        {
            FolderBrowserDialog folderBrowserDialog1 = new FolderBrowserDialog();
            if (folderBrowserDialog1.ShowDialog() == DialogResult.OK)
            {
                txtFolderPath.Text = folderBrowserDialog1.SelectedPath;
                retrieveFolder();
            }
            folderBrowserDialog1.Dispose();
        }
 
        private void retrieveFolder()
        {
            string[] filename = Directory.GetFiles(txtFolderPath.Text);
            listFiles.Items.Clear();
            if (filename != null && filename.Length > 0)
            {
                for (int i = 0; i < filename.Length; i++)
                {
                    if (filename[i].LastIndexOf(".") > 0)
                    {
                        String filetype = filename[i].Substring(filename[i].LastIndexOf(".") + 1);
                        filetype = filetype.ToLower();
                        if (filetype.Equals("xls"))
                        {
                            listFiles.Items.Add(filename[i]);
                        }
                    }
                }
                progressBar1.Minimum = 0;
                progressBar1.Maximum = listFiles.Items.Count;
                progressBar1.Value = 0;
            }
        }
 
        private void btnExtract_Click(object sender, EventArgs e)
        {
            txtOutput.Text = "";
            readExcel();
            MessageBox.Show("提取完毕!");
        }
 
        private void readExcel()
        {
            ApplicationClass app = new ApplicationClass();
            Workbook book = null;
            Worksheet sheet = null;
            Range range = null;
            try
            {
                //遍历文件
                for (int j = 0; j < listFiles.Items.Count; j++)
                {
                    try
                    {
                        app.Visible = false;
                        app.ScreenUpdating = false;
                        app.DisplayAlerts = false;
                        //
                        string execPath = Path.Combine(txtFolderPath.Text, (String)listFiles.Items[j]);
                        book = app.Workbooks.Open(execPath, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value);
                        int count = book.Worksheets.Count;
                        string lineinfo = "";
                        for (int i = 1; i <= count; i++)
                        {
                            sheet = (Worksheet)book.Worksheets[i];
                            range = sheet.get_Range("A4", Missing.Value);
                            String rangevalue = (String)range.Value2;
                            rangevalue = rangevalue.Trim();
                            if ("产品批号".Equals(rangevalue))
                            {
                                //读取产品批号
                                lineinfo = "";
                                range = sheet.get_Range("B4", Missing.Value);
                                lineinfo += range.Value2 + "/t";
                                //产品规格
                                range = sheet.get_Range("D4", Missing.Value);
                                lineinfo += range.Value2 + "/t";
                                //颜色
                                range = sheet.get_Range("B5", Missing.Value);
                                lineinfo += range.Value2 + "/t";
                                //抽样日期
                                range = sheet.get_Range("B6", Missing.Value);
                                lineinfo += range.Value2 + "/r/n";
                                //
                                txtOutput.Text = txtOutput.Text + lineinfo;
                            }
                        }
                        txtOutput.Text = txtOutput.Text + "/r/n";
                        //
                        range = null;
                        sheet = null;
                        if (book != null)
                            book.Close(false, Missing.Value, Missing.Value);
                        book = null;
                    }
                    catch (Exception exp)
                    {
                    }
                    //
                    progressBar1.Value = j+1;
                }
 
            }
            catch (Exception e)
            {
                MessageBox.Show(e.Message);
            }
            finally
            {
                range = null;
                sheet = null;
                if (book != null)
                    book.Close(false, Missing.Value, Missing.Value);
                book = null;
                if (app != null)
                    app.Quit();
                app = null;
            }
        }
    }
}

 

方便获取更多学习、工作、生活信息请关注本站微信公众号城东书院 微信服务号城东书院 微信订阅号
推荐内容
相关内容
栏目更新
栏目热门