.NET Import Excel file to Azure Cosmos DB

Azure cosmos DB 資料使用 JSON 格式, 在 Azure portal 的控制台介面可以直接瀏覽插入和更新資料。此外還可以批量 import 資料, 不過首先需要把資料轉化 JSON 文字檔。

使用 NPOI 讀取 Excel

透過 NuGet 安裝 NPOI, 先加入namespace :

using NPOI.SS.UserModel;
using NPOI.XSSF.UserModel;

讀取 Excel 資料用到 IWorkbook 和 ISheet :

  IWorkbook wbook = new XSSFWorkbook(file);  
  ISheet sheet = wbook.GetSheetAt(0);            

GetRow 方法取得每一行 Row:

    IRow row = sheet.GetRow(i);

GetCell 方法取得每行中的 Cell:

    ICell cell = row.GetCell(j);

使用 Newtonsoft.Json 的 JArray 和 JObject 生成 JSON 物件

下面完整程式碼:

 public string ExcelTable(string file)
{ 
    var list = new JArray() as dynamic;

    using (FileStream fstream = new FileStream(file, FileMode.Open))
    {
        IWorkbook wbook = new XSSFWorkbook(fstream);  
      
        //only 1 sheet
        ISheet sheet = wbook.GetSheetAt(0);

       //Row 1 為 header 
        var header = sheet.GetRow(0).Cells;            

        for (int i = 1; i <= sheet.LastRowNum; i++)
        {
            IRow row = sheet.GetRow(i);

            if (row == null) continue;

           //建立 dynamic  物件
            dynamic obj = new JObject();
 
            for (int j = 0; j < header.Count; j++)
            {
                ICell cell = row.GetCell(j);

                if (cell != null)
                {                   
                    obj.Add(header[j].ToString(), cell.ToString()); 
                }
            }
             
            list.Add(obj);
        }
    } 

    return list.ToString();
}  

最后用 File.WriteAllText(file, json) 產生文字檔, 然后上傳到 Cosmos DB 中。


Posted

in

,

by

Tags:

Comments

發表留言