尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

CSharp: Convert CSV to XLS Using Open XML SDK

CSharp: Convert CSV to XLS Using Open XML SDK
📅 发布时间:2026/6/19 22:54:44
using System;
using System.Data;
using System.IO;
using System.Linq;
using System.Text;
using System.Globalization;
using CsvHelper;
using DocumentFormat.OpenXml;
using DocumentFormat.OpenXml.Packaging;
using DocumentFormat.OpenXml.Spreadsheet;namespace CsvToXlsConverter
{class Program{static void Main(string[] args){try{// Parse command line argumentsstring inputPath = null;string outputPath = null;Encoding encoding = Encoding.UTF8;char delimiter = ',';for (int i = 0; i < args.Length; i++){switch (args[i].ToLower()){case "-i":case "--input":if (i + 1 < args.Length)inputPath = args[++i];break;case "-o":case "--output":if (i + 1 < args.Length)outputPath = args[++i];break;case "-e":case "--encoding":if (i + 1 < args.Length){string encodingName = args[++i];try{encoding = Encoding.GetEncoding(encodingName);}catch{Console.WriteLine($"Warning: Unsupported encoding '{encodingName}'. Using default UTF-8.");}}break;case "-d":case "--delimiter":if (i + 1 < args.Length){string delimiterStr = args[++i];if (delimiterStr.Length == 1)delimiter = delimiterStr[0];else if (delimiterStr.Equals("tab", StringComparison.OrdinalIgnoreCase))delimiter = '\t';elseConsole.WriteLine($"Warning: Unsupported delimiter '{delimiterStr}'. Using default comma.");}break;case "-h":case "--help":ShowHelp();return;}}// Validate input and output pathsif (string.IsNullOrEmpty(inputPath))throw new ArgumentException("Input file path is required. Use -i or --input option.");if (string.IsNullOrEmpty(outputPath))outputPath = Path.ChangeExtension(inputPath, ".xls");if (!File.Exists(inputPath))throw new FileNotFoundException("Input file not found.", inputPath);// Check if output directory existsstring outputDirectory = Path.GetDirectoryName(outputPath);if (!string.IsNullOrEmpty(outputDirectory) && !Directory.Exists(outputDirectory))Directory.CreateDirectory(outputDirectory);// Convert CSV to XLSConsole.WriteLine("CSV to XLS Converter");Console.WriteLine("====================");Console.WriteLine($"Input file: {inputPath}");Console.WriteLine($"Output file: {outputPath}");Console.WriteLine($"Encoding: {encoding.EncodingName}");Console.WriteLine($"Delimiter: {(delimiter == '\t' ? "Tab" : delimiter.ToString())}");Console.WriteLine();DateTime startTime = DateTime.Now;try{// Read CSVConsole.WriteLine("Reading CSV file...");DataTable dataTable = ReadCsv(inputPath, encoding, delimiter);Console.WriteLine($"Successfully read {dataTable.Rows.Count} rows and {dataTable.Columns.Count} columns.");// Convert to XLSConsole.WriteLine("Converting to XLS format...");ConvertDataTableToXls(dataTable, outputPath);TimeSpan duration = DateTime.Now - startTime;Console.WriteLine();Console.WriteLine($"Conversion completed successfully in {duration.TotalSeconds:F2} seconds.");Console.WriteLine($"Output file saved to: {outputPath}");}catch (Exception ex){Console.WriteLine();throw new Exception($"Conversion failed: {ex.Message}", ex);}}catch (Exception ex){Console.WriteLine($"Error: {ex.Message}");Console.WriteLine();Console.WriteLine("Use --help for usage information.");}}/// <summary>/// Reads a CSV file and returns its contents as a DataTable/// </summary>public static DataTable ReadCsv(string filePath, Encoding encoding, char delimiter){try{using (var reader = new StreamReader(filePath, encoding))using (var csv = new CsvReader(reader, new CsvHelper.Configuration.CsvConfiguration(CultureInfo.InvariantCulture){Delimiter = delimiter.ToString(),HasHeaderRecord = true,IgnoreBlankLines = true,TrimOptions = CsvHelper.Configuration.TrimOptions.Trim})){using (var dr = new CsvDataReader(csv)){var dt = new DataTable();dt.Load(dr);return dt;}}}catch (Exception ex){throw new Exception($"Failed to read CSV file: {ex.Message}", ex);}}/// <summary>/// Converts a DataTable to an XLS file using Open XML SDK/// </summary>public static void ConvertDataTableToXls(DataTable dataTable, string outputPath){try{// Create a new spreadsheet documentusing (SpreadsheetDocument document = SpreadsheetDocument.Create(outputPath, SpreadsheetDocumentType.Workbook)){// Add a WorkbookPart to the documentWorkbookPart workbookPart = document.AddWorkbookPart();workbookPart.Workbook = new Workbook();// Add a WorksheetPart to the WorkbookPartWorksheetPart worksheetPart = workbookPart.AddNewPart<WorksheetPart>();worksheetPart.Worksheet = new Worksheet(new SheetData());// Add Sheets to the WorkbookSheets sheets = workbookPart.Workbook.AppendChild(new Sheets());// Append a new worksheet and associate it with the workbookSheet sheet = new Sheet(){Id = workbookPart.GetIdOfPart(worksheetPart),SheetId = 1,Name = "Sheet1"};sheets.Append(sheet);// Get the SheetData objectSheetData sheetData = worksheetPart.Worksheet.GetFirstChild<SheetData>();// Add header rowRow headerRow = new Row();foreach (DataColumn column in dataTable.Columns){Cell cell = CreateCell(column.ColumnName, CellValues.String);headerRow.AppendChild(cell);}sheetData.AppendChild(headerRow);// Add data rowsforeach (DataRow row in dataTable.Rows){Row dataRow = new Row();foreach (var item in row.ItemArray){CellValues cellType = GetCellValueType(item);string cellValue = GetCellValueAsString(item, cellType);Cell cell = CreateCell(cellValue, cellType);dataRow.AppendChild(cell);}sheetData.AppendChild(dataRow);}// Save the workbookworkbookPart.Workbook.Save();}}catch (Exception ex){throw new Exception($"Failed to create XLS file: {ex.Message}", ex);}}/// <summary>/// Creates a new Excel cell with the specified value and type/// </summary>private static Cell CreateCell(string value, CellValues cellType){Cell cell = new Cell();cell.DataType = new EnumValue<CellValues>(cellType);cell.CellValue = new CellValue(value);return cell;}/// <summary>/// Determines the cell value type based on the object type/// </summary>private static CellValues GetCellValueType(object value){if (value == DBNull.Value)return CellValues.String;Type type = value.GetType();if (type == typeof(int) || type == typeof(long) || type == typeof(short) || type == typeof(byte))return CellValues.Number;else if (type == typeof(float) || type == typeof(double) || type == typeof(decimal))return CellValues.Number;else if (type == typeof(DateTime))return CellValues.Date;else if (type == typeof(bool))return CellValues.Boolean;elsereturn CellValues.String;}/// <summary>/// Converts an object to its string representation based on the cell type/// </summary>private static string GetCellValueAsString(object value, CellValues cellType){if (value == DBNull.Value)return string.Empty;switch (cellType){case CellValues.Boolean:return (bool)value ? "1" : "0";case CellValues.Date:DateTime dateValue = (DateTime)value;// Excel stores dates as OLE Automation datesreturn dateValue.ToOADate().ToString(CultureInfo.InvariantCulture);case CellValues.Number:return Convert.ToString(value, CultureInfo.InvariantCulture);default:return Convert.ToString(value);}}/// <summary>/// Shows help information/// </summary>private static void ShowHelp(){Console.WriteLine("CSV to XLS Converter");Console.WriteLine("Converts CSV files to XLS (Excel 97-2003) format using Open XML SDK.");Console.WriteLine();Console.WriteLine("Usage: CsvToXlsConverter [options]");Console.WriteLine();Console.WriteLine("Options:");Console.WriteLine("  -i, --input      Input CSV file path (required)");Console.WriteLine("  -o, --output     Output XLS file path (optional, defaults to input path with .xls extension)");Console.WriteLine("  -e, --encoding   Encoding of the CSV file (optional, defaults to UTF-8)");Console.WriteLine("                   Examples: UTF-8, ASCII, Windows-1252, etc.");Console.WriteLine("  -d, --delimiter  Field delimiter character (optional, defaults to comma)");Console.WriteLine("                   Use 'tab' for tab-delimited files");Console.WriteLine("  -h, --help       Show this help message");Console.WriteLine();Console.WriteLine("Examples:");Console.WriteLine("  CsvToXlsConverter -i data.csv");Console.WriteLine("  CsvToXlsConverter -i input.csv -o output.xls");Console.WriteLine("  CsvToXlsConverter -i data.tsv -d tab -e Windows-1252");}}
}

  

哲学管理(学)人生, 文学艺术生活, 自动(计算机学)物理(学)工作, 生物(学)化学逆境, 历史(学)测绘(学)时间, 经济(学)数学金钱(理财), 心理(学)医学情绪, 诗词美容情感, 美学建筑(学)家园, 解构建构(分析)整合学习, 智商情商(IQ、EQ)运筹(学)生存.---Geovin Du(涂聚文)

相关新闻

  • 负载均衡及三种软件负载
  • Android Handler的runWithScissors手段
  • 完整教程:ImmuCellAI 免疫浸润分析

最新新闻

  • 2026长沙防水补漏权威指南:卫生间/屋面/外墙/地下室正规施工+透明报价+避坑全攻略 - 苏易修缮
  • 爱回收靠谱吗?一个测评博主的深度复盘 - 新闻快传
  • 2026昆山建筑修缮行业全景分析:昆山鼎壹万防水补漏公司及本地适配服务商深度指南 专业防水公司排名推荐(2026年6月防水补漏最新TOP权威排名) - 鼎壹万修缮说
  • 六安7年烘焙老店|三个叔叔手工吐司文庙街店:用心做好每一款生日蛋糕 - 速递信息
  • 2026合肥防水补漏权威指南:卫生间/屋面/外墙/地下室正规施工+透明报价+避坑全攻略 - 苏易修缮
  • 爱回收买iPad靠谱吗?质检与售后逐项看 - 新闻快传

日新闻

  • 5分钟掌握Python进化算法:Geatpy高性能优化工具完全指南
  • Microchip 24AA044 EEPROM选型与应用全指南:从参数解析到实战编程
  • 华为的鸿蒙到底有多牛?为什么称作遥遥领先?

周新闻

  • 3步解锁iOS设备:applera1n激活锁绕过完全指南
  • 39 2026 人工智能证书终极盘点,普通人选 AI 证书可以从这些方向入手
  • Redis 暴露公网有多危险?从端口检查到补救步骤

月新闻

  • 【总结】入门篇:50句话让你记住架构核心概念
  • WeChatMsg技术方案解析:实现Mac微信数据自主管理的完整解决方案
  • WeChatMsg:革新性微信数据备份方案,打造你的专属数字记忆库

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号