C# convert csv to xls (using existing csv file)

前端 未结 3 951
自闭症患者
自闭症患者 2020-12-24 14:49

i believe here are lot a discussion with this matter. but i read all post and try but it never work with c#. my goal is simple that i have existing csv file. just want conve

3条回答
  •  轮回少年
    2020-12-24 15:23

    If you want to proceed with OpenXML then you can follow this.

    install the nuget package

    Install-Package DocumentFormat.OpenXml -Version 2.11.3
    

    Read the CSV file yourself as a text file (Example from above answer):

    private IEnumerable ReadCsv(string fileName, char delimiter = ';')
    {
        var lines = System.IO.File.ReadAllLines(fileName, Encoding.UTF8).Select(a => a.Split(delimiter));
        return (lines);
    }
    
    

    OpenXML code:

    private bool ConvertWithOpenXml(string excelFileName, string worksheetName, IEnumerable csvLines)
            {
                if (csvLines == null || csvLines.Count() == 0)
                {
                    return (false);
                }
                using (SpreadsheetDocument package = SpreadsheetDocument.Create(excelFileName, SpreadsheetDocumentType.Workbook, true))
                {
                    package.AddWorkbookPart();
                    package.WorkbookPart.Workbook = new Workbook();
                    package.WorkbookPart.AddNewPart();
                    SheetData xlSheetData = new SheetData();
                    foreach (var line in csvLines)
                    {
                        Row xlRow = new Row();
                        foreach (var col in line)
                        {
                            Cell xlCell = new Cell(new InlineString(new Text(col.ToString()))) { DataType = CellValues.InlineString };
                            xlRow.Append(xlCell);
                        }
                        xlSheetData.Append(xlRow);
                    }
                    package.WorkbookPart.WorksheetParts.First().Worksheet = new Worksheet(xlSheetData);
                    package.WorkbookPart.WorksheetParts.First().Worksheet.Save();
    
                
                    // create the worksheet to workbook relation
                    package.WorkbookPart.Workbook.AppendChild(new Sheets());
                    package.WorkbookPart.Workbook.GetFirstChild().AppendChild(new Sheet()
                    {
                        Id = package.WorkbookPart.GetIdOfPart(package.WorkbookPart.WorksheetParts.First()),
    
                        SheetId = 1,
    
                        Name = worksheetName
    
                    });
    
                    package.WorkbookPart.Workbook.Save();
                }
                return (true);
            }
    
    

提交回复
热议问题