C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[1]: Excelの1列目のみ読み込まない


(過去ログ 115 を表示中)

[トピック内 4 記事 (1 - 4 表示)]  << 0 >>

■68026 / inTopicNo.1)  Excelの1列目のみ読み込まない
  
□投稿者/ ゆんたん (1回)-(2013/09/17(Tue) 09:30:46)

分類:[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;
        }


引用返信 編集キー/
■68028 / inTopicNo.2)  Re[1]: Excelの1列目のみ読み込まない
□投稿者/ WebSurfer (50回)-(2013/09/17(Tue) 11:18:08)
No68026 (ゆんたん さん) に返信
> ExcelをC#で読み込むプログラムを書いています。
> Excelの1行目が列タイトル、2行目からデータを格納して2列目に値が存在しない時に終了したいです。
> (1列目が空白なら別のクラスで番号を振るっています)。
> DataTableにExcelのセルに入っている値を読み込みたいのですが、何故か1列目だけ""(空白文字列)で読み込んでしまいます。
> 解決方法を教えて下さい。

直接の回答ではありませんが・・・

Excel ファイルからデータを読んできて DataTable を作るだけなら、
Office オートメーションの機能を利用するのではなく、Jet OLE DB
プロバイダ(または ACE OLE DB プロバイダ)と ADO.NET を使用す
る方が簡単だと思います。

Excel をインストールする必要がありませんし、もし、上記のプログ
ラムをサーバーで利用しているとすると、Office オートメーション
をサーバーで使用する時の諸問題もありませんので。

Visual Basic .NET と ADO.NET を使用して Excel ブックのレコード
の取得と変更を行う方法
http://support.microsoft.com/kb/316934/ja


引用返信 編集キー/
■68050 / inTopicNo.3)  Re[1]: Excelの1列目のみ読み込まない
□投稿者/ じゃんぬねっと (13回)-(2013/09/19(Thu) 02:24:41)
自分の庭の方が元投稿だったとはね...

とりあえず、同じ質問内容のスレッドのリンクを貼っておきます。
http://dobon.net/cgi-bin/vbbbs/cbbs.cgi?mode=al2&namber=31798
引用返信 編集キー/
■68061 / inTopicNo.4)  Re[1]: Excelの1列目のみ読み込まない
□投稿者/ 裕猫 (69回)-(2013/09/19(Thu) 16:06:34)
2013/09/19(Thu) 16:07:20 編集(投稿者)

No68026 (ゆんたん さん) に返信
> ExcelをC#で読み込むプログラムを書いています。
> Excelの1行目が列タイトル、2行目からデータを格納して2列目に値が存在しない時に終了したいです。
> (1列目が空白なら別のクラスで番号を振るっています)。
> DataTableにExcelのセルに入っている値を読み込みたいのですが、何故か1列目だけ""(空白文字列)で読み込んでしまいます。
> 解決方法を教えて下さい。
>
> 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());
> }

引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -