2012-02-16 6 views
0

MS Excelシートが1つのマトリックスデータで埋められています。データ(数値)を持つセルの範囲のみを取得します。

数字領域のみを取得するにはどうすればよいですか?

今私はworkSheet.UsedRangeでデータ範囲を抽出しています。しかし、1行の行列を削除すると、行が削除されても、usedRangeで考慮されます!それは私が以前にそれらの細胞を使ったからです。

どのようにすればは実際のもの(数字)の範囲のみを得ることができますか

コード:

public Array ReadData(string fullPath, Size size) 
{ 
    Excel.Application application; 
    Workbook workBook; 
    Worksheet workSheet; 
    Range range; 

    application = new Excel.ApplicationClass(); 
    workBook = application.Workbooks.Open(fullPath, 0, true, 5, "", "", true, XlPlatform.xlWindows, "\t", false, false, 0, true, 1, 0); 
    workSheet = (Worksheet)workBook.Worksheets.get_Item(1); 

    //HERE IS THE PROBLEM 
    range = workSheet.UsedRange; 

    if (!size.IsEmpty) 
    { 
     Size availableSize = new Size(range.Columns.Count, range.Rows.Count); 
     if ((availableSize.Width < size.Width) || (availableSize.Height < size.Height)) 
     { 
      string msg = string.Format("Available data range ({0}) at the sheet is smaller than needed size ({1})", availableSize, size); 
      throw new ArgumentException(msg); 
     } 
     else if ((availableSize.Width > size.Width) || (availableSize.Height > size.Height)) 
     { 
      range = workSheet.get_Range(workSheet.Cells[1, 1], workSheet.Cells[size.Width, size.Height]); 
      string msg = string.Format("Available data range ({0}) at the sheet is bigger than needed size ({1})", availableSize, size); 
      Trace.TraceInformation(msg); 
     } 
    } 

    Array data; 

    data = (Array)range.Cells.Value2; 

    return data; 
} 

可能な解決策は、私が思うVBでのポストでした。 C#で次のようになります。

 range = workSheet.UsedRange; 
     range = range.CurrentRegion.SpecialCells(XlCellType.xlCellTypeConstants, XlSpecialCellsValue.xlNumbers); 

が、それは

+0

明らかにするには:この 'data =(配列)range.Cells.Value2;の結果はどうですか?それはまた削除された行を含んでいますか(空の文字列かsmthか)? –

+0

セルを編集してアイテムを削除すると、うまくいきました。それはもはや範囲を変更しない、それはおそらく2010年のExcelのため、私は知らない。 – Pedro77

答えて

1

"見つかりませ細胞は" 私は本当にC#のを知っていませんが、Excelでは、あなたは
Range("yourRange").SpecialCells(xlCellTypeConstants, xlNumbers)、または
Range("yourRange").CurrentRegion.SpecialCells(xlCellTypeConstants, xlNumbers)

を使用excpetionを上げます

http://msdn.microsoft.com/en-us/library/aa213567(v=office.11).aspx
または SpecialCells in VSTO


How to get the range of occupied cells in excel sheet

+0

SpecialCellsは何を意味しますか? xlCellTypeConstants?もっと詳しく説明できますか? – Pedro77

+0

編集を参照して、自分でも少しだけ検索してください!私はあなたに黄金の答えを与えました、あなたはあなたの好きな検索エンジンにその言葉だけを入力することができませんか? –

+0

大丈夫、私は今知っている、失礼する必要はありません。とにかくありがとう。 – Pedro77

関連する問題