虚表 —— 保存为csv格式文件或获取csv格式文本

光庆 3月前 519

import win.ui;
import godking.vlistEx;
/*DSG{{*/
mainForm = win.form(text="vlistEx - table adapter";right=849;bottom=578)
mainForm.add(
button={cls="button";text="保存为csv文件";left=296;top=496;right=536;bottom=544;z=2};
vlist={cls="vlistEx";left=10;top=10;right=840;bottom=440;db=1;dl=1;dr=1;dt=1;edge=1;transparent=1;z=1}
)
/*}}*/

var t = { fields={"序号","姓名","身份证"} };
for(i=1;10;1){
    var tt={};
	tt["序号"]="[@rowindex]";
	tt["姓名"]=`"{ 姓 +@# '+-/* $ !%$[']名 }"`;
	tt["身份证"]="//!@##$%%$^&^&**())_身'份'证\\";
	..table.push(t,tt);
}
mainForm.vlist.setTable(t,,{50,300,300},0x1);

mainForm.button.oncommand = function(id,event){
	import console
	console.dump(mainForm.vlist.saveToCsv()) // 获取csv格式文本
	mainForm.vlist.saveToCsv("C:\Users\Administrator\Desktop\a.csv") //保存为csv格式文件
}

mainForm.show();
win.loopMessage();


最新回复 (2)
  • mndsoft 21小时前
    0 引用 2

    卢大师,这个保存为 csv 文件为何乱码? 

    另外,请指导下如何把 保存的csv文件加载到 虚表,谢谢


  • mndsoft 6小时前
    0 引用 3

    乱码可能是导出时编码格式所致,用记事本或notepad++打开显示正常。

    另外,让Claude 3.5 Sonnet写了导入的功能,不过用的是aardio内置的listview。接下来试试让Claude 3.5 Sonnet 学习下 卢大师的虚表。

    import win.ui;
    import fsys.dlg;
    
    /*DSG{{*/
    var winform = win.form(text="CSV 文件读取与导出示例";right=759;bottom=469)
    winform.add(
        btnLoad={cls="button";text="加载 CSV 文件";left=10;top=10;right=120;bottom=40;z=1};
        btnExport={cls="button";text="导出 CSV 文件";left=130;top=10;right=240;bottom=40;z=3};
        listview={cls="listview";left=10;top=50;right=750;bottom=460;edge=1;fullRow=1;gridLines=1;z=2}
    )
    /*}}*/
    
    // 简单的 CSV 解析函数
    function parseCsv(str) {
        var lines = string.split(str, '\n');
        var result = {};
        for(i=1; #lines; 1) {
            var line = string.trim(lines[i]);
            if(#line > 0) {
                var fields = string.split(line, ',');
                for(j=1; #fields; 1) {
                    fields[j] = string.trim(fields[j]);
                }
                table.push(result, fields);
            }
        }
        return result;
    }
    
    // CSV 导出函数
    function exportToCsv(data) {
        var lines = {};
        for(i=1; #data; 1) {
            var line = {};
            for(j=1; #data[i]; 1) {
                // 如果字段包含逗号、引号或换行符,将其用引号括起来
                if(string.find(data[i][j], '[,"\r\n]')) {
                    table.push(line, '"' + string.replace(data[i][j], '"', '""') + '"');
                } else {
                    table.push(line, data[i][j]);
                }
            }
            table.push(lines, string.join(line, ','));
        }
        return string.join(lines, '\r\n');
    }
    
    // 加载 CSV 文件
    winform.btnLoad.oncommand = function(id,event){
        var filepath = fsys.dlg.open("CSV 文件|*.csv|所有文件|*.*||", "选择 CSV 文件");
        if(!filepath) return;
        
        var content = string.load(filepath);
        if(!content) {
            win.msgbox("无法读取文件内容", "错误");
            return;
        }
        
        var csv = parseCsv(content);
        if(#csv < 1) {
            win.msgbox("CSV 文件为空或格式不正确", "错误");
            return;
        }
        
        winform.listview.clear();
        //winform.listview.clearColumn();
        
        for(i=1; #csv[1]; 1){
            winform.listview.insertColumn(csv[1][i], 100);
        }
        
        for(i=2; #csv; 1){
            winform.listview.addItem(csv[i]);
        }
        
       // for(i=1; #csv[1]; 1){
       //     winform.listview.setColumnWidth(i, -2);
       // }
    }
    
    // 导出 CSV 文件
    winform.btnExport.oncommand = function(id,event){
        var data = {};
        
        // 获取列标题
        var columns = {};
        var columnCount = winform.listview.columnCount;
        if(columnCount == 0) {
            win.msgbox("listview 中没有数据可以导出", "错误");
            return;
        }
        
        for(i=1; columnCount; 1) {
            var columnInfo = winform.listview.getColumn(i);
            if(columnInfo) {
                table.push(columns, columnInfo.text);
            }
        }
        table.push(data, columns);
        
        // 获取所有行数据
        var itemCount = winform.listview.count;
        for(i=1; itemCount; 1) {
            var row = {};
            for(j=1; columnCount; 1) {
                table.push(row, winform.listview.getItemText(i, j));
            }
            table.push(data, row);
        }
        
        // 导出为 CSV
        var csvContent = exportToCsv(data);
        
        // 保存文件
        var filepath = fsys.dlg.save("CSV 文件|*.csv|所有文件|*.*||", "保存 CSV 文件", "*.csv");
        if(filepath) {
            string.save(filepath, csvContent);
            win.msgbox("文件已成功导出", "成功");
        }
    }
    
    winform.show();
    win.loopMessage();


返回