天天看點

C# 在excel表格中檢索并導出資料

由于工作需要,我經常使用excel文檔來存儲和處理各種資料,在生活中偶爾也會使用excel表格來記錄各種開銷,相信很多朋友也和我一樣。Excel的功能很強大,其中一個很實用的資料處理功能就是查找和替換,它讓我們可以很友善的找到表格中的資料。但我發現excel并不能直接将這些查找到的資料導出。設想我有一個excel文檔,裡面存放了學校的老師、學生和勞工的一些資訊,我想将這個文檔中所有老師的資訊全部檢索出來,并提取到一個新的excel文檔裡面,如何實作?如果檔案不大的話,可以逐行copy,可如果檔案很大,這個方法就不行了,費時費力。經過一番研究,于是有了這篇文章。下面就來看看怎樣使用C#程式設計的方法,将一個excel工作表中的資料檢索并提取到一個新的excel文檔裡。

在這裡我使用了一個免費的Excel API-

Spire.XLS

. 有需要的朋友可以下載下傳使用。 

這是原excel檔案截圖:

C# 在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);
      

效果圖:

C# 在excel表格中檢索并導出資料

全部代碼:

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);
        }
    }
}
      

繼續閱讀