C#高效實(shí)現(xiàn)Excel與CSV的互相轉(zhuǎn)換
在數(shù)據(jù)處理和報(bào)表工作流程中,將 Excel 文件和 CSV 文件互相轉(zhuǎn)換是非常常見(jiàn)的需求。CSV 文件輕量、易解析,非常適合與數(shù)據(jù)庫(kù)、數(shù)據(jù)分析工具或 Web 服務(wù)集成,而 Excel 則提供豐富的格式、公式和數(shù)據(jù)驗(yàn)證功能。在許多企業(yè)應(yīng)用中,你可能需要在這兩者之間靈活轉(zhuǎn)換,以便兼顧數(shù)據(jù)處理效率和可讀性。
使用 C#,你可以高效地完成這些轉(zhuǎn)換,同時(shí)確保數(shù)據(jù)完整性、格式準(zhǔn)確,并保持自動(dòng)化處理的靈活性。本文將從基礎(chǔ)操作講起,逐步介紹自定義設(shè)置、批量處理及高級(jí)實(shí)踐技巧,幫助你在實(shí)際工作中輕松應(yīng)對(duì)各種轉(zhuǎn)換需求。
準(zhǔn)備工作:安裝所需庫(kù)
在編寫代碼之前,你需要安裝一個(gè)支持 Excel 文件操作的庫(kù)。本文使用 Free Spire.XLS for .NET,它是免費(fèi)的 Excel 庫(kù),支持現(xiàn)代 Excel 功能,并提供將 Excel 轉(zhuǎn) CSV 以及 CSV 轉(zhuǎn) Excel 的內(nèi)置方法。
通過(guò) NuGet 安裝
在 Visual Studio 項(xiàng)目中運(yùn)行以下命令:
Install-Package FreeSpire.XLS
驗(yàn)證安裝是否成功
安裝完成后,可以創(chuàng)建一個(gè)簡(jiǎn)單的控制臺(tái)程序來(lái)驗(yàn)證:
using Spire.Xls;
class Program
{
static void Main()
{
Workbook workbook = new Workbook();
System.Console.WriteLine("已成功安裝。");
}
}
如果程序運(yùn)行無(wú)報(bào)錯(cuò),說(shuō)明庫(kù)已經(jīng)可以使用,可以開始文件轉(zhuǎn)換操作。
Excel 轉(zhuǎn) CSV
將 Excel 工作表導(dǎo)出為 CSV 是最常見(jiàn)的操作,尤其在以下場(chǎng)景中:
- 將數(shù)據(jù)提供給數(shù)據(jù)庫(kù)或 ETL 流程
- 生成可供 Web 服務(wù)或數(shù)據(jù)分析工具使用的 CSV 文件
- 簡(jiǎn)化文件傳輸和存儲(chǔ),減少文件體積
基礎(chǔ)轉(zhuǎn)換
下面示例展示了如何將 Excel 文件的第一個(gè)工作表轉(zhuǎn)換為 UTF-8 編碼的 CSV 文件:
using Spire.Xls;
using System.Text;
namespace ConvertExcelToCsv
{
class Program
{
static void Main(string[] args)
{
Workbook workbook = new Workbook();
workbook.LoadFromFile("Sample.xlsx");
Worksheet sheet = workbook.Worksheets[0];
sheet.SaveToFile("ExcelToCSV.csv", ",", Encoding.UTF8);
workbook.Close();
}
}
}
這種方法可以保留文本、數(shù)字以及基本格式,生成的 CSV 文件可被 Excel、數(shù)據(jù)庫(kù)或任何支持 CSV 的工具打開。
自定義 CSV 輸出
有時(shí)候,你可能希望對(duì) Excel 數(shù)據(jù)導(dǎo)出的方式進(jìn)行更多控制:
- 指定分隔符(逗號(hào)、分號(hào)、制表符等)
- 處理特殊字符或非英文文本
- 保留或忽略表頭
- 控制數(shù)字和日期格式
Spire.XLS 允許你明確指定分隔符和編碼,從而避免不同地區(qū)設(shè)置或非標(biāo)準(zhǔn)字符導(dǎo)致的問(wèn)題。
CSV 轉(zhuǎn) Excel
將 CSV 導(dǎo)入 Excel 同樣簡(jiǎn)單。你可以在導(dǎo)入時(shí)自動(dòng)調(diào)整格式、自動(dòng)適應(yīng)列寬行高,并處理數(shù)字與文本沖突。
using Spire.Xls;
namespace ConvertCsvToExcel
{
class Program
{
static void Main(string[] args)
{
Workbook workbook = new Workbook();
workbook.LoadFromFile(@"ExcelToCSV.csv", ",", 1, 1);
Worksheet sheet = workbook.Worksheets[0];
CellRange usedRange = sheet.AllocatedRange;
usedRange.IgnoreErrorOptions = IgnoreErrorType.NumberAsText;
usedRange.AutoFitColumns();
usedRange.AutoFitRows();
workbook.SaveToFile("CSVToExcel.xlsx", ExcelVersion.Version2013);
workbook.Close();
}
}
}
這種方法不僅保證數(shù)據(jù)完整導(dǎo)入,同時(shí)也讓內(nèi)容在 Excel 中易于閱讀和進(jìn)一步處理。
高級(jí)場(chǎng)景:批量轉(zhuǎn)換
在實(shí)際應(yīng)用中,你可能需要自動(dòng)處理多個(gè)文件。例如,將一個(gè)文件夾內(nèi)所有 Excel 文件批量轉(zhuǎn)換為 CSV:
using Spire.Xls;
using System.IO;
using System.Text;
class BatchConvert
{
static void Main()
{
string inputFolder = @"C:\InputExcels";
string outputFolder = @"C:\OutputCSVs";
foreach (string filePath in Directory.GetFiles(inputFolder, "*.xlsx"))
{
Workbook workbook = new Workbook();
workbook.LoadFromFile(filePath);
Worksheet sheet = workbook.Worksheets[0];
string fileName = Path.GetFileNameWithoutExtension(filePath);
sheet.SaveToFile(Path.Combine(outputFolder, fileName + ".csv"), ",", Encoding.UTF8);
workbook.Close();
}
System.Console.WriteLine("批量轉(zhuǎn)換完成。");
}
}
這種方法非常適合:
- 自動(dòng)化 ETL 流程
- 每日或每周報(bào)表批量導(dǎo)出
- 對(duì)大規(guī)模數(shù)據(jù)集進(jìn)行分析和預(yù)處理
在批量處理時(shí),注意保持文件路徑、命名規(guī)范和內(nèi)存管理,避免處理大文件夾時(shí)出現(xiàn)性能問(wèn)題。
實(shí)用技巧與注意事項(xiàng)
雖然 Excel 與 CSV 的轉(zhuǎn)換操作看起來(lái)簡(jiǎn)單,但一些細(xì)節(jié)會(huì)影響最終結(jié)果:
- 編碼問(wèn)題:CSV 文件的字符編碼需要與數(shù)據(jù)匹配,否則非英文字符可能顯示異常。UTF-8 是推薦選擇,舊系統(tǒng)可能需要 UTF-16。
- 數(shù)字與文本的處理:Excel 在導(dǎo)入 CSV 時(shí)可能將數(shù)字識(shí)別為文本或反之。使用 ??
?IgnoreErrorOptions?? 可以避免數(shù)字與文本混淆,特別是公式或 ID 數(shù)據(jù)。 - 資源管理:每次操作完成后,請(qǐng)調(diào)用 ??
?Close()?? 釋放內(nèi)存,尤其在循環(huán)或批量處理場(chǎng)景下,否則可能導(dǎo)致內(nèi)存占用增加。 - 列寬與行高:CSV 文件不會(huì)保存 Excel 的格式。若希望回到 Excel 后內(nèi)容仍清晰可讀,使用 ??
?AutoFitColumns()??? 和 ??AutoFitRows()?? 調(diào)整列寬和行高。 - 批量處理的容錯(cuò):在處理多個(gè)文件時(shí),建議加入異常處理,例如跳過(guò)損壞文件、記錄失敗文件路徑,以保證批量任務(wù)不中斷。
- 分隔符選擇:在多地區(qū)環(huán)境下,默認(rèn)逗號(hào)分隔符可能會(huì)與數(shù)字小數(shù)點(diǎn)沖突,可根據(jù)需求選擇分號(hào)或制表符作為分隔符。
總結(jié)
在 C# 中操作 Excel 和 CSV 文件,其實(shí)比想象的簡(jiǎn)單。無(wú)論是單個(gè)文件轉(zhuǎn)換,還是處理整個(gè)文件夾的數(shù)據(jù),掌握基礎(chǔ)方法和一些自定義設(shè)置,就能讓數(shù)據(jù)處理更加高效。
結(jié)合基礎(chǔ)轉(zhuǎn)換、自定義選項(xiàng)和批量處理,你可以輕松完成:
- 數(shù)據(jù)自動(dòng)化工作流
- 報(bào)表生成與數(shù)據(jù)整理
- 大規(guī)模數(shù)據(jù)預(yù)處理和分析
這些方法可以幫助你減少重復(fù)操作,提高準(zhǔn)確性,同時(shí)讓數(shù)據(jù)處理過(guò)程更清晰可控。
到此這篇關(guān)于C#高效實(shí)現(xiàn)Excel與CSV的互相轉(zhuǎn)換的文章就介紹到這了,更多相關(guān)C# Excel與CSV互轉(zhuǎn)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
c#橋接模式(bridge結(jié)構(gòu)模式)用法實(shí)例
這篇文章主要介紹了c#橋接模式(bridge結(jié)構(gòu)模式)用法,較為詳細(xì)的分析了橋接模式的原理與用法實(shí)例,具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2014-12-12
C#實(shí)現(xiàn)String字符串轉(zhuǎn)化為SQL語(yǔ)句中的In后接的參數(shù)詳解
在本篇文章中小編給大家分享的是一篇關(guān)于C#實(shí)現(xiàn)String字符串轉(zhuǎn)化為SQL語(yǔ)句中的In后接的實(shí)例內(nèi)容和代碼,需要的朋友們參考下。2020-01-01
利用C#代碼實(shí)現(xiàn)圖片旋轉(zhuǎn)360度
本文介紹利用C#代碼實(shí)現(xiàn)圖片旋轉(zhuǎn)360度,具體實(shí)例代碼已附上,僅供大家參考,希望對(duì)大家有所幫助2016-11-11
C#中Datetimepicker出現(xiàn)問(wèn)題的解決方法
這篇文章主要給大家介紹了關(guān)于C#中Datetimepicker出現(xiàn)問(wèn)題的解決方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2018-11-11
C#操作SQLite實(shí)現(xiàn)數(shù)據(jù)的增刪改查
SQLite是一個(gè)輕量級(jí)、跨平臺(tái)的關(guān)系型數(shù)據(jù)庫(kù),在小型項(xiàng)目中,方便,易用,同時(shí)支持多種開發(fā)語(yǔ)言。本文將用C#語(yǔ)言對(duì)SQLite 的一個(gè)封裝,實(shí)現(xiàn)數(shù)據(jù)的增刪改查。需要的可以參考一下2022-01-01
C# 調(diào)用WebApi的實(shí)現(xiàn)
這篇文章主要介紹了C# 調(diào)用WebApi的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-04-04
SuperSocket入門--Telnet服務(wù)器和客戶端請(qǐng)求處理
本文的控制臺(tái)項(xiàng)目是根據(jù)SuperSocket官方Telnet示例代碼進(jìn)行調(diào)試的,官方示例代碼:Telnet示例。下面跟著小編一起來(lái)看下吧2017-01-01

