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
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);
}