【问题标题】:C# Convert csv to excel 2007C# 将 csv 转换为 excel 2007
【发布时间】:2015-01-07 05:08:23
【问题描述】:

我需要将可以升级到 300.000 行的报表的数据导出到 Excel。

对于高速要求,我使用this 库来创建一个 csv 文件。我现在遇到的唯一问题是列宽不适合最宽单元格的内容,它会被剪切,直到我手动加宽列。

我认为也许一个选项是将我的 csv 文件转换为 excel 文件,但我找不到任何解决方案!

一种选择是使用 OpenXML,但至少我知道,它不适用于 Excel 2007。

另一种选择是使用 Interop,但它也有问题。当我尝试创建 Application 对象时,它会抛出异常:

“检索具有 CLSID {00024500-0000-0000-C000-000000000046} 的组件的 COM 类工厂失败,原因如下 错误:80070005 访问被拒绝。”(来自 HRESULT 的异常:0x80070005 (E_ACCESSDENIED))。

出于安全原因,我发现的解决方案无法在我正在处理的客户端上实施。

我的选择已经不多了..

感谢您的帮助!!!

【问题讨论】:

  • Open XML SDK 肯定适用于 Excel 2007,因为它支持 Open XML 格式 (".xlsx")。您还可以选择使用EPPlusNPOI 库(我听说它们都可以生成“.xlsx”文件并且使用起来更容易一些)。

标签: c# excel csv column-width


【解决方案1】:

感谢@mason 的建议,我最终使用了EPPlus

谢谢!

【讨论】:

    【解决方案2】:

    你可以使用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()
    

    【讨论】:

    • 谢谢!但正如我在问题中所说,出于安全原因,无法在我正在处理的客户端上实现互操作。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-18
    • 1970-01-01
    • 2014-11-19
    • 2012-10-10
    • 2016-11-30
    • 1970-01-01
    相关资源
    最近更新 更多