2012-08-31 7 views
6

で開始する必要があります。これまでの素晴らしい作業、ただし開始特定の行のクエリ。これは、クライアントからのExcelスプレッドシートが、データが実際に開始される前に、Excelファイルの上部にいくつかのイメージと "ヘッダー"情報を使用するためです。LinqToExcel - 私は<a href="http://code.google.com/p/linqtoexcel/wiki/UsingLinqToExcel" rel="noreferrer">LinqToExcel library</a>を使用している特定の行

データ自体は読み単純なもので、かなり一般的なものでありますが、私は特定の行に開始するExcelQueryFactoryを伝える方法を知る必要があります。

私はWorksheetRange<Company>("B3", "G10")オプションを認識していますが、最後の行を指定したくない場合は、ちょうどに開始ファイルを読み込みます。最新のVを使用して

。LinqToExcelのC#

答えて

1

とは、あなたがLinqToExcelの枠組みの中でこの瞬間と繰り返しで、Unforunatly

+0

いや、unfortuantlyそれは私にエラーを与えるあなたは 'length'変数を割り当てる – contactmatt

0

WorksheetRange<Company>("B3", "G")を試してみましたが、これを行うにはどのような方法があるように表示されません。私たちは、Excelドキュメント内のそれ自身の「シート」にアップロードするデータを持っているクライアントを必要としているこの問題を回避するには

。最初の行のヘッダー行とその下のデータ。彼らが "メタデータ"を望むなら、別のシートにこれを含める必要があります。以下は、特定のシートを照会する方法についてのLinqToExcel documentationの例です。

var excel = new ExcelQueryFactory("excelFileName"); 
var oldCompanies = from c in repo.Worksheet<Company>("US Companies") //worksheet name = 'US Companies' 
        where c.LaunchDate < new DateTime(1900, 0, 0) 
        select c; 
2

私はこのコードを試してみました、うまく動作するように見えた:

var book = new LinqToExcel.ExcelQueryFactory(@"E:\Temporary\Book1.xlsx"); 

var query = 
    from row in book.WorksheetRange("A4", "B16384") 
    select new 
    { 
     Name = row["Name"].Cast<string>(), 
     Age = row["Age"].Cast<int>(), 
    }; 

私は戻ってデータを持つ行を得ました。

4

私は多分他の人のために、あなたはすでにこれを解決したとは - あなたは(、...「B3」)をいくつかの範囲に指定するように単純ではありません

var excel = new ExcelQueryFactory(path); 
var allRows = excel.WorksheetNoHeader(); 

//start from 3rd row (zero-based indexing), length = allRows.Count() or computed range of rows you want 
for (int i = 2; i < length; i++) 
{ 
    RowNoHeader row = allRows.ElementAtOrDefault(i); 
    //process the row - access columns as you want - also zero-based indexing 
} 

を使用することができますように見えますが、また道。これは、少なくとも誰か助け 希望;私はこれを試してみました)

+0

「EndRange引数が『G』は、セル名の形式が無効ですか」?あなたはすべての行を読みたい場合は – CodeArtist

+0

まあ、通常は、 'allRows.Count'または' allRows.Count() 'や' allRows.Length'(申し訳ありませんが、今は知らない)だろう。 または(存在しない) 'Range(" B3 "、" G10 ")を指定する代わりに、それを計算する必要があります。 「長さ」は表示目的にのみ使用されていました。それでは、単純な解法AFAIKはありませんでした。 良い点、編集されたオリジナルの投稿。私は、これは非常に有用であることが分かっていますが、レコードのカウントに開始行の値を追加する必要があるか、あなたが最後に行の数を欠場指摘したかった – podvlada

2

は、私のシナリオで正常に動作します。

//get the sheets info 
     var faceWrksheet = excel.Worksheet(facemechSheetName); 
     // get the total rows count. 
     int _faceMechRows = faceWrksheet.Count(); 

     // append with End Range. 
    var faceMechResult = excel.WorksheetRange<ExcelFaceMech>("A5", "AS" + _faceMechRows.ToString(), SheetName). 
         Where(i => i.WorkOrder != null).Select(x => x).ToList(); 
+0

それがあるべきように、int型_faceMechRows = faceWrksheet.Count()+ 5; –

+0

@DavidMolyneuxこれは2年前のことではわかりませんが、私の場合はいくつかのヘッダーレコードをスキップすることでした。 – Eldho

+0

こんにちはあなたは正しいです私はこれをもう少し見てきました。私の場合は空白の行だけですが、ロードされず、合計行数は空の行の量だけ短くなります。したがって、5行の空白行と15行のデータ(合計20行)がある場合、合計行数は15になるので、行5から行15まではスキップされた行に最後の5行が追加されません。正しい合計。 –

関連する問題