zoukankan      html  css  js  c++  java
  • C# 在excel表格中检索并导出数据

    由于工作需要,我经常使用excel文档来存储和处理各种数据,在生活中偶尔也会使用excel表格来记录各种开销,相信很多朋友也和我一样。Excel的功能很强大,其中一个很实用的数据处理功能就是查找和替换,它让我们可以很方便的找到表格中的数据。但我发现excel并不能直接将这些查找到的数据导出。设想我有一个excel文档,里面存放了学校的老师、学生和工人的一些信息,我想将这个文档中所有老师的信息全部检索出来,并提取到一个新的excel文档里面,如何实现?如果文件不大的话,可以逐行copy,可如果文件很大,这个方法就不行了,费时费力。经过一番研究,于是有了这篇文章。下面就来看看怎样使用C#编程的方法,将一个excel工作表中的数据检索并提取到一个新的excel文档里。

    在这里我使用了一个免费的Excel API-Spire.XLS. 有需要的朋友可以下载使用。 

    这是原excel文件截图:

                           

     

    详细步骤和代码片段如下:

    安装Spire.XLS后,新建一个项目,并添加Bin文件夹下的dll文件作为项目的引用。这里要注意选择和你项目的.NET Framework版本一致的dll文件(如您项目的.NET Framework版本是4.0,则选择.NET 4.0文件夹下的dll文件 )。

    步骤1:新建一个workbook对象并获取第一个worksheet。

    Workbook newBook = new Workbook();
    Worksheet newSheet = newBook.Worksheets[0];
    

    步骤2:新建一个workbook对象并加载excel文件。

    Workbook workbook = new Workbook();
    workbook.LoadFromFile("信息.xlsx");
    

    步骤3:获取你想要检索并从中提取数据的worksheet。在此示例中是第一个worksheet。

    Worksheet sheet = workbook.Worksheets[0];
    

    步骤4:检索数据并导出至步骤1新建的excel文档的worksheet里。

    int i = 1;
    int columnCount = sheet.Columns.Count();
    foreach (CellRange range in sheet.Columns[0])
    {
        if (range.Text == "老师")
            {
                CellRange sourceRange = sheet.Range[range.Row, 1, range.Row, columnCount];
                CellRange destRange = newSheet.Range[i, 1, i, columnCount];
                sheet.Copy(sourceRange, destRange, true);
                i++;
            }
    }
    

    步骤5:保存文件。

    newBook.SaveToFile("信息-老师.xlsx", ExcelVersion.Version2010);
    

    效果图:

     

     

    全部代码:

    using System.Linq;
    using Spire.Xls;
    
    namespace Retrieve_and_extract_data
    {
        class Program
        {
            static void Main(string[] args)
            {
                Workbook newBook = new Workbook();
                Worksheet newSheet = newBook.Worksheets[0];
                Workbook workbook = new Workbook();
                workbook.LoadFromFile("信息.xlsx");
                Worksheet sheet = workbook.Worksheets[0];
                int i = 1;
                int columnCount = sheet.Columns.Count();
                foreach (CellRange range in sheet.Columns[0])
                {
                    if (range.Text == "老师")
                    {
                        CellRange sourceRange = sheet.Range[range.Row, 1, range.Row, columnCount];
                        CellRange destRange = newSheet.Range[i, 1, i, columnCount];
                        sheet.Copy(sourceRange, destRange, true);
                        i++;
                    }
                }
                newBook.SaveToFile("信息-老师.xlsx", ExcelVersion.Version2010);
            }
        }
    }
    
  • 相关阅读:
    设置eclipse控制台上的信息输入到某个文件
    [HTML]去除li前面的小黑点,和ul、LI部分属性[转]
    fscanf函数的应用
    VC++中编译C出错:error C2143: syntax error : missing ';' before 'type'
    eclipse console输出有长度限制
    jstl之核心标签
    vmware esxi 6.0 开启嵌套虚拟化
    Proxmox如何进入单人维护模式(重置root密码)
    jstl错误排除:According to TLD or attribute directive in tag file, attribute value does not accept any expressions
    EL表达式
  • 原文地址:https://www.cnblogs.com/Yesi/p/5048462.html
Copyright © 2011-2022 走看看