2017-09-15 23 views
-4

ちょっと、私はCSVHelperに問題があります。C#CsvHelper CsvHelper.Excel ClosedXML、基本コードに構文エラーがあります

かなり良い形のExcelファイルを読む必要があります。しかし、ヘッダー行は残念なことに行1にはなく、行4にあります。私はすでにこの問題を抱えていましたが、これはいつも同じ方法で対応しています。ExcelParser.Read()を呼び出してCsvReaderに渡します。しかし、今日の事は、私はこのコードを実行すると、ClosedXMLは私にreader.GetRecords<T>().ToList() エラーで構文エラーを与え、異なっている:

using CsvHelper.Excel; 
using CsvHelper; 

var excelParser = new ExcelParser(FilePath); 

int header = 2; 
for (int i = 0; i < header; i++) 
{ 
    excelParser.Read(); 
} 


using (var reader = new CsvReader(excelParser)) 
{ 
    reader.Configuration.Delimiter = ";"; 
    reader.Configuration.RegisterClassMap<MaterialTemplateClassMap>(); 
    var records = reader.GetRecords<TemplatesSheet>().ToList(); 
} 

のClassMapは、非常に基本的であるExcelファイルは全く複雑ではありません。だから私はそこに問題を見ない。たぶん私は何かが欠けているでしょう。 "構文エラー"、ExceptionType:のSystem.Exception

at ClosedXML.Excel.CalcEngine.CalcEngine.GetParameters() 
    at ClosedXML.Excel.CalcEngine.CalcEngine.ParseAtom() 
    at ClosedXML.Excel.CalcEngine.CalcEngine.ParseUnary() 
    at ClosedXML.Excel.CalcEngine.CalcEngine.ParsePower() 
    at ClosedXML.Excel.CalcEngine.CalcEngine.ParseMulDiv() 
    at ClosedXML.Excel.CalcEngine.CalcEngine.ParseAddSub() 
    at ClosedXML.Excel.CalcEngine.CalcEngine.ParseCompare() 
    at ClosedXML.Excel.CalcEngine.CalcEngine.Parse(String expression) 
    at ClosedXML.Excel.CalcEngine.ExpressionCache.get_Item(String expression) 
    at ClosedXML.Excel.CalcEngine.CalcEngine.Evaluate(String expression) 
    at ClosedXML.Excel.XLCell.get_Value() 
    at CsvHelper.Excel.ExcelParser.<Read>b__2(IXLCell cell) in c:\Users\chris.rodgers\Documents\GitHub\CsvHelper.Excel\src\CsvHelper.Excel\ExcelParser.cs:Row 130. 
    at System.Linq.Enumerable.WhereSelectEnumerableIterator`2.MoveNext() 
    at System.Linq.Buffer`1..ctor(IEnumerable`1 source) 
    at System.Linq.Enumerable.ToArray[TSource](IEnumerable`1 source) 
    at CsvHelper.Excel.ExcelParser.Read() in c:\Users\chris.rodgers\Documents\GitHub\CsvHelper.Excel\src\CsvHelper.Excel\ExcelParser.cs:Row 129. 
    at CsvHelper.CsvReader.Read() 
    at CsvHelper.CsvReader.<GetRecords>d__65`1.MoveNext() 
    at System.Collections.Generic.List`1..ctor(IEnumerable`1 collection) 
    at System.Linq.Enumerable.ToList[TSource](IEnumerable`1 source) 
    at **Name removed**.Winform.Loader.ReadSchemeData.Read() in **Path removed**ReadSchemeData.cs:Row 45. 
    at **Name removed**.Winform.Converter.buttonAdditional_Click(Object sender, EventArgs e) in **Path removed**Converter.cs:Row 113. 
    at System.Windows.Forms.Control.OnClick(EventArgs e) 
    at System.Windows.Forms.Button.OnClick(EventArgs e) 
    at System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent) 
    at System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks) 
    at System.Windows.Forms.Control.WndProc(Message& m) 
    at System.Windows.Forms.ButtonBase.WndProc(Message& m) 
    at System.Windows.Forms.Button.WndProc(Message& m) 
    at System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m) 
    at System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m) 
    at System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam) 
    at System.Windows.Forms.UnsafeNativeMethods.DispatchMessageW(MSG& msg) 
    at System.Windows.Forms.Application.ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(IntPtr dwComponentID, Int32 reason, Int32 pvLoopData) 
    at System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32 reason, ApplicationContext context) 
    at System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32 reason, ApplicationContext context) 
    at System.Windows.Forms.Application.Run(Form mainForm) 
    at **Name removed**.Program.Main() in **Path removed**\Program.cs:Row 23. 
+0

構文エラー?正確なエラーメッセージは何ですか?コンパイル時または実行時にこれを取得していますか?あなたの質問をより完全にしてください。 – DavidG

+0

例外が発生した場合は、その詳細とスタックトレースを問題を再現するコードとともに送信するのが通常です。 [mcve] –

+0

を読んでください。例外の種類とメッセージがありません...また、「Excelは複雑ではありません」と文字通り尋ねました。 –

答えて

0

[OK]をClosedXML、メッセージから実行時に 。正確な問題は、xlsxからcsvへの変換が正しく機能していないことです。 CsvHelper.Excelは、セル内の数式を適切に処理しません。変換中に破損している可能性があるCSVとしてデータを読み込もうとするまで、例外はスローされません。 修正:すべての数式を手動で削除するか、別のxlsxからcsvへの変換を探します。

関連する問題