|
分類:[C#]
ExcelをC#で読み込むプログラムを書いています。
Excelの1行目が列タイトル、2行目からデータを格納して2列目に値が存在しない時に終了したいです。
(1列目が空白なら別のクラスで番号を振るっています)。
DataTableにExcelのセルに入っている値を読み込みたいのですが、何故か1列目だけ""(空白文字列)で読み込んでしまいます。
解決方法を教えて下さい。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using System.Runtime.InteropServices;
using System.ComponentModel;
using System.Drawing;
using System.Windows.Forms;
using Excel = Microsoft.Office.Interop.Excel;
using System.Data.OleDb;
...
private static DataTable ExcelReader()
{
string ExcelBookFileName = getFullPath(); //Excelファイルのフルパス
string strNow = DateTime.Now.ToString("#M/d/yyyy H:m:s#"); //現在の日時
DataTable dtImport = new DataTable();
if (ExcelBookFileName.Length != 0) //フルパスが指定されていたら
{
Microsoft.Office.Interop.Excel.Application ExcelApp
= new Microsoft.Office.Interop.Excel.Application();
ExcelApp.Visible = false;
Excel.Workbooks woBooks = ExcelApp.Workbooks;
Excel.Workbook woBook = null;
woBook = woBooks.Open(ExcelBookFileName, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing);
Excel.Worksheet ws1 = (Excel.Worksheet)woBook.Worksheets[1];
ws1.Select(Type.Missing);
Excel.Range woCells;
int intRow = 0;
woCells = (Excel.Range)ws1.Cells[2, 2];
while (woCells.Text.ToString().Length != 0)
{
dtImport.Rows.Add();
for (int clms = 0; clms < 23; clms++)
{
if (intRow == 0)
{
woCells = (Excel.Range)ws1.Cells[1, clms + 1];
dtImport.Columns.Add(woCells.Text.ToString());
}
woCells = (Excel.Range)ws1.Cells[intRow + 2, clms + 1];
if (woCells.Text.ToString().Length == 0)
{
dtImport.Rows[intRow][clms] = "";
}
else
{
//woCells = (Excel.Range)ws1.Cells[intRow + 2, clms + 1];
dtImport.Rows[intRow][clms] = woCells.Text.ToString();
}
}
if (intRow == 0)
{
dtImport.Columns.Add("[DATETIME]");
}
dtImport.Rows[intRow][23] = strNow;
intRow++;
//While用セル再設定
woCells = (Excel.Range)ws1.Cells[intRow + 2, 2];
}
woBook.Close(false, Type.Missing, Type.Missing);
ExcelApp.Quit();
}
else
{
dtImport.Rows.Add();
dtImport.Columns.Add();
}
return dtImport;
}
|