Bir diziyi kopyalayıp Excel'e yapıştırmak (Bilgi paylaşımı)
İyi günler arkadaşlar
Bugün efatura, earşiv faturalalarını çözümleyip muhasebe kaydı olarak çıktısını alıp excele yapıştırmak istiyordum.
Kopyalama işleminin ardından Excel'e yapıştırdığım zaman metin olarak kalması "600.001" değerlerim var.
Kopyala, yapıştır işleminin ardından 600.001 gibi değerler sayı olarak algılanıyor.
Hatta \"600.001\"
tırnak içinde kullanıp yapıştırmama rağmen istediğim sonucu alamadım hep sayı..
Şimdilik bir çözüm buldum. Belki ihtiyacı olan olur paylaşmak istedim.
Sayı gibi görünen değerleri excel formülü olarak tırnak içine alırsak. Excel tarafından metin olarak algılanacaktır.
600.001
=> ="600.001"
let gmFisi = [
{
gmkod: "600.018",
vergino: "2222222222",
aciklama: "FATURALI SATIŞ",
borclu: 0,
alacakli: 500,
},
{
gmkod: "391.018",
vergino: "2222222222",
aciklama: "FATURALI SATIŞ",
borclu: 0,
alacakli: 90,
}
{
gmkod: "100",
vergino: "2222222222",
aciklama: "FATURALI SATIŞ",
boclu: 590,
alacakli: 0
}
]
let gmfisiExcel = "Hesap Kodu\tVergi No\tAçıklama\tBorçu\tAlacaklı";
gmFisi.forEach(r=>{
gmFisiExcel += `="${r.gmkod}"\t="${r.vergino}"\t${r.aciklama}\t${r.borclu}\t${r.alacakli}\n`
})
navigator.clipboard.writeText(gmfisiExcel)
Soru hatalı mı? 👎
Eğer sorunun kurallara aykırı olduğunu düşünüyorsanız lütfen bize bildirin!
Cevaplar (1)
Web sayfasındaki biçimlendirilmiş bir tabloyu seçip kopyalayıp, biçimlendirilmiş olarak Excel'e yapıştırmanın javascript ile yapılması.
- Sütun genişlikleri alınmıyor.
- Metin olarak saklanması istenen
td
etiketlerinin niteliğindetype="text"
olması yeterli. - Sayı formatlarının da ülkemize göre ondalık değer "," olmalı. Tabloya işlenen veya arka planda oluşturulan bir tabloda sayılara dikkat edilmeli.
<table>
<style>
table {
border: solid 2px blue;
}
td {
border: solid 1px blue
}
tbody > tr:nth-child(odd){
background-color: #e8eef7;
}
tbody > tr:nth-child(even){
background-color: #ffffec
}
</style>
<thead>
<tr>
<th style="width:150pt">GmKod</th>
<th style="width:150pt">Tutar</th>
</tr>
</thead>
<tbody>
<tr>
<td type="text">600.001</td>
<td type="number">500,00</td>
</tr>
<tr>
<td type="text">391.018</td>
<td type="number">90,00</td>
</tr>
<tr>
<td type="text">600.001</td>
<td type="number">500,00</td>
</tr>
<tr>
<td type="text">391.018</td>
<td type="number">90,00</td>
</tr>
<tr>
<td type="text">600.001</td>
<td type="number">500,00</td>
</tr>
<tr>
<td type="text">391.018</td>
<td type="number">90,00</td>
</tr>
<tr>
<td type="text">600.001</td>
<td type="number">500,00</td>
</tr>
<tr>
<td type="text">391.018</td>
<td type="number">90,00</td>
</tr>
</tbody>
</table>
<button onclick="copy()">Koyala</button>
function copy(){
let $table = document.querySelector("table")
$tableTxt = $table.outerHTML.replaceAll(/\n/g, "");
$csTxt = $tableTxt.replaceAll(/(?<=<td type="text">)(.*?)(?=<.*\/.+.?>)/g,"=\"$1\"")
// console.log($csTxt);
const type = "text/html";
const blob = new Blob([$csTxt], { type });
const data = [new ClipboardItem({ [type]: blob })];
navigator.clipboard.write(data).then(
() => {
console.log("Başarılı");
},
() => {
console.log("error");
}
);
}