2014-11-10 5 views
0

Мне нужно экспортировать данные отчета, которые могут перерасти до 300 000 строк.C# Преобразование csv в excel 2007

Для обеспечения высокой скорости я использовал библиотеку this для создания файла csv. Единственная проблема, с которой я столкнулся сейчас, заключается в том, что ширина столбца не адаптирована к содержимому самой широкой ячейки, она обрезается до тех пор, пока я не буду вручную расширять столбец.

Я думал, что, возможно, вариант состоял в том, чтобы преобразовать файл csv в файл excel, но я не смог найти решение anywere!

Один вариант использует OpenXML, но, по крайней мере то, что я знаю, что это не работает для Excel 2007

Другой вариант должен был работать с Interop, но он также имеет свои проблемы .. когда я пытаюсь создать объект Application, он бросает исключение:

"Retrieving the COM class factory for component with CLSID {00024500-0000-0000-C000-000000000046} failed due to the following error: 80070005 Access is denied." (Exception from HRESULT: 0x80070005 (E_ACCESSDENIED)).

И решения, которые я нашел, не может быть реализована на клиенте я работаю, по соображениям безопасности.

Я бегу из вариантов ..

Спасибо за вашу помощь !!!

+1

Open XML SDK, безусловно, будет работать в Excel 2007, так как он поддерживает формат Open XML («.xlsx»). У вас также есть возможность использовать библиотеки [EPPlus] (https://epplus.codeplex.com/) и [NPOI] (https://npoi.codeplex.com/) (оба из которых могут генерировать «.xlsx» файлы и немного проще в использовании, я слышу). – mason

ответ

0

благодаря предложению @mason I закончил с использованием EPPlus.

Спасибо!

0

Вы можете использовать Microsoft.Office.Interop.Excel:

using System; 
using Excel = Microsoft.Office.Interop.Excel; 

namespace ConsoleApplication3 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      // input and output files 
      string csv = @"c:\data\input.csv"; 
      string xls = @"c:\data\output.xlsx"; 

      // init the Appl obj 
      Excel.Application xl = new Excel.Application(); 

      // get the worksheet 
      Excel.Workbook wb = xl.Workbooks.Open(csv); 
      Excel.Worksheet ws = (Excel.Worksheet)wb.Worksheets.get_Item(1); 

      // select the used range 
      Excel.Range used = ws.UsedRange; 

      // autofit the columns 
      used.EntireColumn.AutoFit(); 

      // save as xlsx 
      wb.SaveAs(xls, 51); 

      wb.Close(); 
      xl.Quit(); 
     } 
    } 
} 

В качестве альтернативы, вы можете получить доступ к тем же методам из

autofit.ps1

# define input and output files 
$csv = Join-Path (Get-Location) "input.csv" 
$xls = Join-Path (Get-Location) "myoutput.xlsx" 

# initialize the COM object 
$xl = New-Object -COM "Excel.Application" 
$xl.Visible = $false 

# open the CSV file 
$wb = $xl.workbooks.open($csv) 
$ws = $wb.Worksheets.Item(1) 

# tell Excel to autofit the columns to the data 
$range = $ws.UsedRange 
[void] $range.EntireColumn.Autofit() 

# save to xlsx format and close 
$wb.SaveAs($xls, 51) 
$wb.close() 
+0

Спасибо! Но мне нужно, чтобы он был C#, потому что он является частью веб-приложения .NET. – Nicole

+0

Спасибо! но, как я сказал в своем вопросе, Interop не может быть реализован на клиенте, над которым я работаю, по соображениям безопасности. – Nicole