Schimbați virgulă în punctul

Schimbați virgulă în punctul

Nu știm asta.

Nu știm asta. Deoarece în mod implicit este preluat din sistem și nu în Excel

Macro pentru schimbare:
Cu aplicație






# xA0; # xA0; # xA0; # xA0; .DecimalSeparator = ":"
# xA0; # xA0; # xA0; # xA0; .ThousandsSeparator = "."
# xA0; # xA0; # xA0; # xA0; .UseSystemSeparators = False
Sfârșit cu
Rezolvați concluziile.

P.S.
Dar nu este vorba de a se angaja în astfel de gunoi. În viitor, vor exista o mulțime de probleme din cauza asta, deoarece celelalte vor fi CORECT, spre deosebire de ale tale.


> Dar nu e vorba de a se angaja în astfel de gunoi. În viitor, va exista
> DROP probleme din cauza asta, deoarece ceilalți delimitatori vor avea
> CORECT, spre deosebire de a ta.
<Задача еще и в том, чтоб при выходе из моей программы вернуть все в исходное (поставить запятую)/I>

Lucrez în Delphi5.


> Nu știm asta. Deoarece este luată în mod implicit
> din sistem, nu în Excel "eMacros pentru schimbare: Cu aplicație
> .DecimalSeparator = ":" .ThousandsSeparator
> = "." .UseSystemSeparators = FalseEnd WithDelay concluziile.
>

Modific setările de sistem înainte de a executa Excel:
dacă DecimalSeparator = "," atunci
începe
# xA0; dacă MessageDlg ("Avertisment" + # 13 + # 13 +
# xA0; "Pentru funcționarea normală a programului, este necesar ca separatorul întregului și parte fracționată a numerelor să fie o perioadă." + # 13+
# xA0; "Schimba virgula la punct?", mtWarning, [mbYes, mbNo], 0) = mrNO apoi Abort;
# xA0; DecimalSeparator: = "." ;;
# xA0; // DateSeparator: = ".";
# xA0; / / ShortDateFormat: = "dd.mm.yyyyy";
# xA0; / / ShortTimeFormat: = "hh: mm: ss";
se încheie;
se încheie;

Și puteți să întrebați: "Pentru funcționarea normală a programului, este necesar ca separatorul întregului și al unei părți fracționare a numerelor să fie un punct", cum ar fi?

Ce face acest program?


> Și puteți să întrebați "Pentru funcționarea normală a programului
> este necesar ca separatorul întregului și parte fracționată a numerelor
> a fost punctul, "este ca?

Programul de calcul al debitului unui avion. Problema aici

// Aici este mesajul de eroare
// În Excel trebuie să instalați: Tools -> Settings -> International -> point
SHEET.CELLS [3,2] .NumberFormat: = "000,00";
// Este necesar
// SHEET.CELLS [3,2] .NumberFormat: = "000,00";

Dacă predefiniți punctul în Excel cu un delimitator, atunci nu există nici o problemă, dar nu știu cine va continua să lucreze cu programul. toată lumea nu poate explica ce și unde ar trebui să fie preconfigurată.

Îmi pare rău, nu înțeleg. Și de ce nu schimb punctul de la virgulă înainte de intrare sau ceva ce nu înțeleg?

În general, dacă înțeleg în continuare explicațiile dvs. de anvergură, probabil că aveți nevoie de aceasta:

var
# xA0; s: șir;
# xA0; Excel: OleVariant;
# xA0; Cartea de lucru, Foaia: varianta;
începe
# xA0; s: = ExtractFilePath (ParamStr (0)) + "fff.xls";
# xA0; Excel: = CreateOleObject ("Excel.Application");
# xA0; WorkBook: = Excel.Application.WorkBooks.Add;
# xA0; Foaie: = WorkBook.WorkSheets [1];
# xA0; Excel.ActiveWorkBook.Saveas (s, xlNormal, "", "FALSE, FALSE);
# xA0; încercați
# xA0; # xA0; SHEET.CELLS [2,2]: = "Valoarea controlului";
# xA0; # xA0; SHEET.CELLS [3,2]: = "1965";
# xA0; # xA0; Sheet.Columns [2] .Selectați; // Pentru toate cele 2 coloane
# xA0; # xA0; SHEET.CELLS [3,2] .Selectați; // Pentru celulă
# xA0; # xA0; Excel.Selecția.NumberFormat: = "0.00";

# xA0; # xA0; Excel.Application.ActiveWorkbook.Save;
# xA0; # xA0; Application.MessageBox (PChar (e), "Finalizat", MB_OK + MB_ICONINFORMATION);
# xA0; în cele din urmă
# xA0; # xA0; Excel.WorkBooks.Close;
# xA0; sfârșitul;
se încheie;


> În general, dacă aș înțelege spațiul dvs. îndepărtat
> explicații, probabil că aveți nevoie de aceasta:

Nu asta. Trebuie să modific parametrii internaționali în Excel. Vezi cum aș face asta fără programul meu. Mi-ar rula Excel, apoi faceți clic pe Instrumente-setările internaționale, apoi eliminați bifați USE SYSTEM DIVIDERS și în celulă DIVIDERII CELUI ȘI FREQUENCY PARTY pune un punct, faceți clic pe OK. Asta e tot.

Așadar, trebuie să pun acest punct din programul meu. Asta este, schimba virgulă în punctul înainte de a începe fișierul # xA0; Excel, apoi întoarceți totul înapoi, adică puneți o virgulă (dar din nou programată).

Ei bine, totul, am trecut. Conversația este surdă și orb.
Înțeleg că vrei să schimbi separatorul de sistem, nu înțeleg de ce. Dacă introduceți în mod programabil un document xls, atunci nu există o astfel de sarcină pentru care ar fi necesar să schimbați separatorul, deoarece Același delimiter poate fi schimbat în program. Încerc să vă explic că aveți o eroare în stabilirea sarcinii, nu v-ați stabilit sarcina corectă de a vă rezolva problema (judecă numai prin postările dvs.).
Ați dat un exemplu, în care nu este introdus nici un număr fracționat.
Cu toate acestea, să presupunem că trebuie să introduceți un număr:
SHEET.CELLS [3,2]: = "1965,45";
Apoi, da, il vom pastra in celula ca text. Cu toate acestea, dacă facem acest lucru:
SHEET.CELLS [3, 2]: = StringReplace ("1965,45", ",", ".", [RfReplaceAll]);
atunci totul va fi chiki-puki. Și nici o schimbare de divizoare de sistem.
Să continuăm. Dacă doriți, la intrare
SHEET.CELLS [3,2]: = "1965";
Numărul din celulă este afișat ca 1965,00, atunci este necesar să faceți acest lucru
SHEET.CELLS [3, 2]. NumarFormat: = "0,00";
SHEET.CELLS [3, 2]: = "1965";
Ie atribuiți mai întâi un număr numeric, apoi introduceți un număr.

Totul, aceasta este ultima incercare de a va explica greseala voastra. Sau încercați să specificați în mod clar problema, în care trebuie să schimbați separatorul. sau, probabil, altcineva vă va ajuta.

Oh, oh-oh. Mi-a dat seama. Doriți ca punctele să fie afișate în loc de virgule atunci când deschideți documentul, nu?

În general, un fel de telepatie.

Utilizatorul are nevoie de acest lucru?

// Definiți calea spre fișierul IShR_ExcelA4.xls, care trebuie să fie deschis pentru editare (există și are trei coli)






n: = APPLICATION.ExeName;
n: = ExtractFilePath (n);
n: = n + "IShR_ExcelA4.xls";

încerca
Excel: = CreateOleObject ("Excel.APPLICATION")
cu excepția
ShowMessage ("Nu există acces la server" ExcelXP "");
Exit;
END;
Screen.Cursor: = crGrămuș;
//Excel.SheetsInNewWorkbook:=1;// adăugați o nouă carte de coli
Excel.Workbooks.Open (n, 0);

// ****************** Adăugarea intrărilor în "SHEET1" *******
SHEET: = Excel.Workbooks [1] .Stețele [1]; // CALCULAREA CALEA ȘI FUEL
SHEET.Columns.Clear; // șterge înregistrările anterioare
SHEET.PageSetup.PrintGridLines: = TRUE; // imprimare grilă activată

// HERE VOR FI DATE OUT

// ************************* Adăugarea intrărilor la "SHEET2" ***************** *
FIȘĂ: = Excel.Workbooks [1] .Sheets [2];
SHEET.Columns.Clear; // șterge înregistrările anterioare
// SHEET.CELLS [6,22]: = "greutate constantă";
// SHEET.CELLS [7,22]: = "Încărcare";

// HERE VOR FI DATE OUT

Screen.Cursor: = crDefault;
Excel.VISIBLE: = TRUE; // Afișați Excel
Label1.Caption: = "Timp de descărcare # xA0; "+ TimeToStr (Time-BegTime);
END;
end.

Deci, acest exemplu mi-a arătat că Excel funcționează bine și se pare că motivul este în datele care sunt de ieșire la fișierul Excel după ce este rulat.

Am început să verific mai departe. Asta este, am încercat să furnizez date

În timp ce verificați (dacă doriți, bineînțeles) lucrarea acestui exemplu, nu voi merge mult timp și apoi continuați să discutați despre experiențele lor. Despre cum mi-am dat seama de motiv.

Programul a fost făcut mult timp și a funcționat perfect în Win98 c Office-98

Un astfel de birou în natură nu există, pretinde piraților.


> # xA0; Vorbind surd și orb.

Am adaugat urmatoarele date:

unitate 1;
interfață
utilizări
# xA0; Windows, Mesaje, SysUtils, Clase, Grafică, Controale, Formulare, Dialoguri,
# xA0; Excel97; OleServer; ComObj; AppEvnts; StdCtrls; Grids; Butoane; ExtCtrls; Clipbrd; ComCtrls;
tip
# xA0; TForm1 = clasa (TForm)
# xA0; # xA0; Buton1: TButton;
# xA0; # xA0; Eticheta1: Tabel;
# xA0; # xA0; procedura Button1Click (Expeditor: TObject);
# xA0; # xA0; procedura FormCreate (expeditor: TObject);
# xA0; privat
# xA0; # xA0;
# xA0; public
# xA0; # xA0;
# xA0; # xA0; Excel: Varianta;
# xA0; sfârșitul;
var
# xA0; Form1: TForm1;
punerea în aplicare
UTILIZĂRI # xA0; ShellAPI;

procedura TForm1.Button1Click (expeditor: TObject);
CONST
Msg = "Încercați să stabiliți comunicarea cu serverul" Microsoft ExcelXP ". Acest proces poate dura un timp considerabil" + # 13+ "Continuați?";
VAR
FIȘĂ: Varianta;
n: OleVariant;
BegTime: TDateTime;
BEGIN
DACĂ APPLICATION.MessageBox (Msg, "Descărcați Microsoft ExcelXP", MB_YesNO + MB_ICONEXCLAMATION) = IDNO THEN Ieșire;
BegTime: = Time; // Controlați timpul de descărcare al ExcelXP

// Definiți calea spre fișierul IShR_ExcelA4.xls, care trebuie deschis pentru editare
n: = APPLICATION.ExeName;
n: = ExtractFilePath (n);
n: = n + "IShR_ExcelA4.xls";

încerca
Excel: = CreateOleObject ("Excel.APPLICATION")
cu excepția
ShowMessage ("Nu există acces la server" ExcelXP "");
Exit;
END;
Screen.Cursor: = crGrămuș;
//Excel.SheetsInNewWorkbook:=1;// adăugați o nouă carte de coli
Excel.Workbooks.Open (n, 0);

// ****************** Adăugarea intrărilor în "SHEET1" *******
SHEET: = Excel.Workbooks [1] .Seets [1]; // (CALCULAREA CALEA DE CALCUL ȘI A COMBUSTIBILULUI)
SHEET.Columns.Clear; // șterge înregistrările anterioare
SHEET.PageSetup.PrintGridLines: = TRUE; // imprimare grilă activată

SHEET.CELLS [2,2]: = "Valoare de referință";
SHEET.CELLS [3,2]: = "19,65";

Screen.Cursor: = crDefault;
Excel.VISIBLE: = TRUE; // Afișați Excel
Label1.Caption: = "Timp de descărcare # xA0; "+ TimeToStr (Time-BegTime);
END;

Iar atunci cand ati executat eroarea Delphi a iesit. NU INSTALA CLASA PropertyFormat proprietatea CLASS Page

Deci este în format.
Am înlocuit toate expresiile de tip
SHEET.CELLS [3,2] .NumberFormat: = "000,00";

Așadar, am decis că, indiferent de ce au ca delimitator, programul meu ar trebui să facă separatorul un punct, o muncă, iar atunci când îl opriți, returnați ceea ce era acolo (punct sau virgulă).

Mi sa părut că puteți face acest lucru adăugând-o când descărcați programul
line pentru a schimba delimitatorul din sistem:
procedura TForm1.FormCreate (expeditor: TObject);
începe
dacă DecimalSeparator = "," atunci
începe
# xA0; dacă MessageDlg ("Avertisment" + # 13 + # 13 +
# xA0; "Pentru funcționarea normală a programului, este necesar ca separatorul întregului și parte fracționată a numerelor să fie o perioadă." + # 13+
# xA0; "Schimbați virgula la punct?", mtWarning, [mbYes, mbNo], 0) = mrNO apoi Abort;
# xA0; DecimalSeparator: = "." ;;
# xA0; // DateSeparator: = ".";
# xA0; / / ShortDateFormat: = "dd.mm.yyyyy";
# xA0; / / ShortTimeFormat: = "hh: mm: ss";
se încheie;
se încheie;

Nu ajută. Așa că am decis să întreb pe Kloptsev pe internet.

Apropo, dacă pleci # xA0; SHEET.CELLS [3,2] .NumberFormat: = "000,00";
iar în Excelare pre-setați punctul separator (Service-parametri-internațional - puneți punctul), apoi toate tip-top.
Ei bine, nu-mi scrieți instrucțiuni despre cum să folosiți programul. deși poate fi necesar. dar tot ce trebuie să învățați este cum să schimbați virgula până la punctul programabil în Excel, precum și "Tools-options-international-put the point".

Formatul trebuie să corespundă setărilor regionale, iar acest lucru se aplică nu numai la Excel, ci și la alte aplicații. Tu încalci toate cerințele sistemului de operare, iar codul este al tău, care împiedică să scrie corect.


> Programul a fost realizat de foarte mult timp și a funcționat perfect în Win98 c
> Office-98

Îmi cer scuze. Cred că înțelegi. că 97


> Anatoly Podgorețki

Experiența a verificat faptul că pe calculator există atât de mulți utilizatori, deoarece există atât de multe setări. astfel încât programul ar trebui să facă ceea ce este nevoie, iar după finalizare totul va fi pus înapoi. adică să fie independenți de ei. aceasta este ceea ce încerc să realizez

Și nu puteți să întrebați separatorul de sistem și când îl încărcați în eksel să îl utilizați? Ie programul gândește cum îi place și totul este încărcat în Excel, așa cum îi place.


> Galinka

Încerc în loc de DecimalSeparator: = "." trimiteți SendMessage
Mai degrabă nu încerc, dar caut parametrii mesajului necesar sistemului

Ei bine, să setăm setările standard pentru Excel - vom instala, vom lucra cu programul nostru și apoi vom întoarce totul la original, așa cum a fost (pentru utilizatori). Aceasta este întrebarea.
Cine știe ce și ce se schimbă atunci când lucrează cu Excel. Acolo oamenii își pot satisface nevoile și pot fi uitați. De aceea este posibil să introduceți o perioadă sau o virgulă în fereastra Setări internaționale. Acest lucru este doar Anatoly Podgoretsky de toate ruble pentru acest lucru propune să pedepsi, și dezvoltatorii Excel, după cum vedeți, gândiți altfel, permițându-vă să faceți cât aveți nevoie. Și acest lucru este corect. Standardele sunt, de asemenea, o chestiune de timp. mai devreme era punctul, acum o virgulă. atunci noi și astronomii trebuie să gândim. Nu-mi propun să fac doar așa cum vreau. Îmi propun să lucrez și apoi să mă întorc la original.

În timp ce cred asta. fie ca mesajul să fie căutat în sistem pentru a înlocui separatorul de sistem înainte de a începe Excel (și apoi mesajul pentru a returna totul originalului indiferent de ceea ce era acolo) sau trebuie să scrieți instrucțiuni în program.

De fapt, de ce să-l schimb?


> Poate că programul dvs. a trecut prea mult și necesită prea mult?

Excesul nu este necesar. dimpotrivă, ar fi necesar să se extindă, dar tot timpul nu există

Acest lucru este de neînțeles, ceea ce împiedică scrierea SHEET.CELLS [3,2] .NumberFormat: = Format ("000% s00", [XLSeparator]); # xA0; unde XLSeparator să ia de la sv-va care afișează setarea corespunzătoare a unui excel?

> SHEET.CELLS [3,2]: = "19,65";

Dacă acest număr nu este text, atunci de ce nu este scris ca număr?
SHEET.CELLS [3,2]: = 19,65;


> Acest lucru este neclar, ceea ce împiedică să scrie SHEET.CELLS [3,2] .NumberFormat:
> = Format ("000% s00", [XLSeparator]);

[XLSeparator] Nu cred. Lucrez în Delphi5. Ar trece la versiunea ulterioară, dar este legat în acest program de mai mulți congrese serioase.

> [XLSeparator] Nu știu.

Nu sunt destul de clar?
XLSeparator este o variabilă tip șir sau caractere care este preluată din fișierul Excel.DecimalSeparator!

Dacă utilizatorul exel are nevoie de un punct, dați o perioadă, dacă virgula necesită o virgulă, înlocuind delimitatorul corespunzător cu datele programului, dacă este necesar.

Procedură.
var
XLSeparator: varianta;
începe
XLSeparator: = Excel.DecimalSeparator;
SHEET.CELLS [3,2]: = "19,65";
SHEET.CELLS [3,2] .NumberFormat: = Format ("000% s00", [XLSeparator]);
se încheie;

A apărut o eroare Format% nevalid sau incompatibil cu argumentul

Memorie: 0,86 MB
Timp: 0,052 sec







Articole similare

Trimiteți-le prietenilor: