C#: export CSV cu citare și protecție pentru foi de calcul
Exportă date C# în CSV păstrând virgulele și ghilimelele din text. Distinge citarea formatului de protecția pentru valori interpretate ca formule în Excel.
În acest material
Un export CSV nu este simpla concatenare a valorilor cu virgulă. Un titlu poate conține virgulă, ghilimele sau o linie nouă. Cităm fiecare câmp și dublăm ghilimelele din interior. Separat, dacă fișierul va fi deschis într-o foaie de calcul, unele valori text pot fi interpretate ca formule.
Cum lucrezi cu exemplul
Programul complet folosește C# 7.3 și API-uri disponibile în .NET Framework 4.8. Deschide Lesson.csproj din arhivă sau creează un proiect Console App (.NET Framework 4.8) și înlocuiește Program.cs. Datele de demonstrație sunt incluse în cod.
Descarcă sursele și instrucțiunile.
Ideea și pașii de implementare
Funcția Cell normalizează null la text gol și verifică primul caracter nespațiu. Pentru prefixele =, +, - și @ adaugă un apostrof, potrivit politicii didactice pentru coloane text destinate unei foi de calcul. Această transformare schimbă valoarea exportată și trebuie documentată; nu o aplica orbește coloanelor numerice.
Apoi funcția înlocuiește fiecare ghilimea cu două ghilimele și înconjoară câmpul cu ghilimele. Citarea CSV păstrează structura coloanelor, dar singură nu neutralizează formulele. Nu construim aici un import CSV; un parser complet trebuie să trateze și linii noi în câmpuri citate.
Exemplu și rezultat așteptat
Titlul Algoritmi, vol. 1 rămâne într-o singură coloană. Textul C# "practic" este exportat cu ghilimelele interioare dublate. Valoarea =1+1 primește apostrof înaintea semnului egal, pentru a fi tratată ca text în fluxul de utilizare ales.
Text: Algoritmi, vol. 1 → Citează câmpul complet → Text: =1+1 → Protejează înainte de export.Mărește schema ↗
Codul complet
using System;
using System.Collections.Generic;
using System.Linq;
using System.IO;
using System.Globalization;
using System.Xml.Linq;
using System.Data;
class Program {
static string Cell(string value) {
value=value ?? "";string trimmed=value.TrimStart();
if(trimmed.Length>0 && "=+-@".IndexOf(trimmed[0])>=0)value="'"+value;
return "\""+value.Replace("\"","\"\"")+"\"";
}
static void Main() {
Console.WriteLine(Cell("Algoritmi, vol. 1"));
Console.WriteLine(Cell("C# \"practic\""));
Console.WriteLine(Cell("=1+1"));
}
}
Rezultatul programului:
"Algoritmi, vol. 1"
"C# ""practic"""
"'=1+1"
Greșeli și limite
Nu promite compatibilitate identică în toate aplicațiile de calcul tabelar. Separatorul implicit poate depinde de setările regionale, deci documentează separatorul folosit și verifică importul explicit. Pentru schimb de date între programe, poate fi mai potrivit un format fără interpretare de formule. Păstrează politica de export separată de datele originale.
Exersează
Testează câmpul gol, o virgulă, ghilimele și un text care începe cu spații urmate de egal. Verifică faptul că datele originale din model nu sunt modificate. Deschide prin import controlat într-o foaie de calcul și confirmă numărul coloanelor și tratarea ca text a valorii protejate.
Continuă parcursul
Parcursul complet de 50 de lecții
Lecția precedentă: C#: parole, salt și verificare într-un proiect didactic
Lecția următoare: C#: proiect bibliotecă cu împrumut și salvare XML.
Referință: documentația Microsoft.
Întrebări frecvente
Ghilimelele CSV blochează formulele?
Nu neapărat. Citarea rezolvă structura formatului, iar tratarea formulelor este o politică separată.
Apostroful păstrează exact valoarea originală?
Nu. Este o transformare documentată pentru un export destinat unei foi de calcul.
Aplic aceeași regulă numerelor negative?
Nu automat. Definește tipurile coloanelor și politica pentru text separat de valorile numerice.
Un pas mai departe
Autentifică-te pentru a păstra progresul în cont.