2017-01-31 2 views
1

Добрый день. Столкнувшись с проблемой. Существует задача открыть файл * .txt в Excel.Передача данных из txt-файла в книге Excel

Excel.Application xlApp = new Microsoft.Office.Interop.Excel.Application(); 

if (xlApp == null) 
{ 
    TaskDialog.Show("ups", "Where's your Excel?!"); 
} 

Excel.Workbook xlWorkBook; 
Excel.Worksheet xlWorkSheet; 

object misValue = System.Reflection.Missing.Value; 


xlWorkBook = xlApp.Workbooks.Add(misValue); 
xlWorkSheet = (Excel.Worksheet)xlWorkBook.Worksheets.get_Item(1); 

xlApp.Workbooks.OpenText 
(
    @"C:\newPath\OveralFile.txt", 
    Excel.XlPlatform.xlWindows, 
    1,    
    Excel.XlTextParsingType.xlDelimited, 
    Excel.XlTextQualifier.xlTextQualifierDoubleQuote, 
    true,   
    true,   
    false,   
    false,   
    false,   
    false,   
    Type.Missing, 
    misValue, 
    Type.Missing, 
    ".",   
    "," 
); 

xlWorkBook.SaveAs(@"C:\newPath\csharp-Excel.xls", Excel.XlFileFormat.xlWorkbookNormal, misValue, misValue, misValue, misValue, Excel.XlSaveAsAccessMode.xlExclusive, misValue, misValue, misValue, misValue, misValue); 


xlWorkBook.Close(true, misValue, misValue); 

xlApp.Quit(); 


Marshal.ReleaseComObject(xlWorkSheet); 
Marshal.ReleaseComObject(xlWorkBook); 
Marshal.ReleaseComObject(xlApp); 

После того, как книга кодов существует, но пуста. Он выглядит как текстовый документ.

enter image description here

Что я сделал не так?

+0

Вы уверены, что разделитель является вкладкой? –

+0

Также возможно, что вы пропустили некоторые поля для 'Sub OpenText (имя файла как String, [Origin], [StartRow], [DataType], [TextQualifier As XlTextQualifier = xlTextQualifierDoubleQuote], [последовательныйDelimiter], [Tab], [точка с запятой], [Comma ], [Space], [Other], [OtherChar], [FieldInfo], [TextVisualLayout], [DecimalSeparator], [ThousandsSeparator], [TrailingMinusNumbers], [Local]) 'eg предположим, что у вас должно быть 'false' для' OtherChar' (а не 'misValue') и что-то для' TrailingMinusNumbers' и 'Local'? –

+0

Да, я уверен, что разделитель - это вкладка. Текстовый документ создается программно – Kuvon

ответ

0

Проблема с вашим кодом заключается в том, что вы не сохраняете прочитанную книгу, а пустую. Попробуйте изменить эту строку:

xlWorkBook.SaveAs(@"C:\newPath\csharp-Excel.xls", Excel.XlFileFormat.xlWorkbookNormal, 
        misValue, misValue, misValue, misValue, 
        Excel.XlSaveAsAccessMode.xlExclusive, misValue, 
        misValue, misValue, misValue, misValue); 

в этом:

xlApp.Workbooks[2].SaveAs(@"C:\newPath\csharp-Excel.xls", Excel.XlFileFormat.xlWorkbookNormal, 
          misValue, misValue, misValue, misValue, 
          Excel.XlSaveAsAccessMode.xlExclusive, misValue, misValue, 
          misValue, misValue, misValue); 

Таким образом, вы будете экономить новое прочтенное учебное пособие.

Редактировать

Я очистил свой код, потому что вы создавали объекты не нужны, и она уезжала процессы Excel открытым. Код должен быть таким:

Microsoft.Office.Interop.Excel.Application xlApp = new Microsoft.Office.Interop.Excel.Application(); 
object misValue = System.Reflection.Missing.Value; 

xlApp.Workbooks.OpenText 
    (
    @"C:\newPath\OveralFile.txt", 
    Microsoft.Office.Interop.Excel.XlPlatform.xlWindows, 
    1, 
    Microsoft.Office.Interop.Excel.XlTextParsingType.xlDelimited, 
    Microsoft.Office.Interop.Excel.XlTextQualifier.xlTextQualifierDoubleQuote, 
    true, 
    true, 
    false, 
    false, 
    false, 
    false, 
    Type.Missing, 
    misValue, 
    Type.Missing, 
    ".", 
    "," 
); 

xlApp.Workbooks[1].SaveAs(@"C:\newPath\csharp-Excel.xls", Excel.XlFileFormat.xlWorkbookNormal, 
         misValue, misValue, misValue, misValue, 
         Excel.XlSaveAsAccessMode.xlExclusive, misValue, misValue, misValue, 
         misValue, misValue); 

xlApp.Workbooks[1].Close(); 

xlApp.Quit(); 

Marshal.ReleaseComObject(xlApp.Workbooks); 

Marshal.ReleaseComObject(xlApp); 
+0

Большое спасибо. Вы мне очень помогли – Kuvon