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

