iT邦幫忙

0

[Pending] 要如何讀取Excel的指定欄位

目前正在嘗試讀取上傳的Excel內容,有寫出一版可以正常讀取資料的程式碼(未合併儲存格或是指定哪一格等狀況),如下。

【Excel】
https://ithelp.ithome.com.tw/upload/images/20200102/20115336wstFE41JVz.png

【Controller】

using ExcelDataReader;

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;

//省略
public ActionResult Index(HttpPostedFileBase file) {
{
    using(var dc = DataContext.Create())
    using(var reader = ExcelReaderFactory.CreateOpenXmlReader(file.InputStream)) { 
        for(var y = 0; reader.Read(); ++y) {
            if(y<2) {
                continue;
            }

            //可以正常讀取一行三列的資料
            var row = new {
                TestColumn1 = reader.GetString(1),
                TestColumn2 = reader.GetString(2),
                TestColumn3 = reader.GetString(3)
            };
        }
        return View();
    }
}

【View】

//省略
@using(Html.BeginForm("Index", "Import", FormMethod.Post, new {enctype = "multipart/form-data"})){
	@Html.AntiForgeryToken()
	<div class="form-horizontal">
		<div class="form-group">
			<div class="col-md-10">
				<input type="file" name="file" required />
			</div>
		</div>
        	
        <div class="form-group">
			<div class="col-md-offset-2 col-md-10">
				<input type="submit" value="import" class="btn btn-default" />
			</div>
		</div>
	</div>
}

想詢問若是以下這種有指定讀取欄位(白色底的欄位)的部分,請問該怎麼去調整程式碼呢?
https://ithelp.ithome.com.tw/upload/images/20200102/201153366Opvh97sYN.png

圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

2 個回答

3
YoChen
iT邦研究生 1 級 ‧ 2020-01-02 16:47:53

您可以參考官網範例中轉為DataSet的作法
ExcelDataReader

首先必須先在NuGet下載ExcelDataReader.DataSet
example

接著參考以下程式碼

using (var reader = ExcelReaderFactory.CreateReader(stream))
{
    // 將資料轉為DataSet
    DataSet excelInfo = reader.AsDataSet();

    // sheetName 對應 Excel工作表的名稱
    DataTable sheet = excelInfo.Tables["sheetName"];

    // sheet.Rows[RowIndex][ColumnIndex],您的案例為2、6
    string value = sheet.Rows[2][6].ToString();
}
anniecat iT邦新手 3 級 ‧ 2020-01-02 16:50:16 檢舉

好的~謝謝YoChen,我今明兩天來嘗試看看!
另外,想詢問一下,基本上這個DataSet的作法跟我範例中reader的做法,應該是不同的做法對嗎?

anniecat iT邦新手 3 級 ‧ 2020-01-03 09:49:09 檢舉

YoChen,今天有嘗試要使用DataSet的方式去做,有先確認已下載ExcelDataReader,但似乎方法沒有支援以下將資料轉為DataSet的語法

    DataSet excelInfo = reader.AsDataSet();

另外,我發現我少貼了一些code,已補上在Controller上(var reader... 的部份)

YoChen iT邦研究生 1 級 ‧ 2020-01-03 10:43:08 檢舉

anniecat,請確認您是否有下載這兩個組件

  • ExcelDataReader
  • ExcelDataReader.DataSet

確認完畢後,如果不行的話
建置>>重建方案
如果還是不行,請再將錯誤訊息貼出來看看~XDDD

0
I code so I am
iT邦高手 1 級 ‧ 2020-01-04 19:36:46

推薦 EPPlus or NPOI library.

我要發表回答

立即登入回答