2014-11-10 3 views
0

Excel로 300.000 행으로 확대 할 수있는 보고서의 데이터를 내 보내야합니다.C#에서 Excel 2007로 변환

고속 요구 사항을 위해 this 라이브러리를 사용하여 csv 파일을 만들었습니다. 내가 지금 가지고있는 유일한 문제는 열 너비가 가장 넓은 셀의 내용에 맞지 않는다는 것입니다. 열을 수동으로 넓힐 때까지 잘라냅니다.

아마도 CSV 파일을 Excel 파일로 변환하는 옵션이 있다고 생각했지만 해결 방법을 찾을 수 없었습니다.

하나 개의 옵션 의 OpenXML를 사용하지만, 적어도 내가 알고있는, 또 다른 옵션은 상호 운용성 작업을했다가 엑셀 2007

작동하지 않는다는 것입니다,하지만이 또한 문제가되었다

"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 형식 (".xlsx")을 지원하므로 Open XML SDK는 Excel 2007에서 확실히 작동합니다. 또한 [EPPlus] (https://epplus.codeplex.com/) 및 [NPOI] (https://npoi.codeplex.com/) 라이브러리 (둘 다 ".xlsx"를 생성 할 수 있음) 파일을 사용하기가 조금 쉬워졌습니다). – mason

답변

0

덕분에 같은 방법에 액세스 할 수 있습니다 결국 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(); 
     } 
    } 
} 

다른 방법으로, @mason의 I의 제안에

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

감사! 하지만 .NET 웹 응용 프로그램을 표시하기 때문에 C#이 필요합니다. – Nicole

+0

감사합니다! 하지만 내 질문에 말했듯이 Interop은 보안상의 이유로 작업중인 클라이언트에서 구현할 수 없습니다. – Nicole