C#: atestat și pregătire ONTI

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.

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.

Schemă pentru lecția 40: Text: Algoritmi, vol. 1; Citează câmpul complet; Text: =1+1; Protejează înainte de export.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

Bazele C#

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.

Exersează cu o problemă →