目前正在嘗試讀取上傳的Excel內容,有寫出一版可以正常讀取資料的程式碼(未合併儲存格或是指定哪一格等狀況),如下。
【Excel】
【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>
}
想詢問若是以下這種有指定讀取欄位(白色底的欄位)的部分,請問該怎麼去調整程式碼呢?
您可以參考官網範例中轉為DataSet
的作法
ExcelDataReader
首先必須先在NuGet下載ExcelDataReader.DataSet
接著參考以下程式碼
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();
}
好的~謝謝YoChen,我今明兩天來嘗試看看!
另外,想詢問一下,基本上這個DataSet
的作法跟我範例中reader
的做法,應該是不同的做法對嗎?
YoChen,今天有嘗試要使用DataSet
的方式去做,有先確認已下載ExcelDataReader
,但似乎方法沒有支援以下將資料轉為DataSet的語法
DataSet excelInfo = reader.AsDataSet();
另外,我發現我少貼了一些code,已補上在Controller上(var reader...
的部份)
anniecat,請確認您是否有下載這兩個組件
ExcelDataReader
ExcelDataReader.DataSet
確認完畢後,如果不行的話建置
>>重建方案
如果還是不行,請再將錯誤訊息貼出來看看~XDDD