有人可以向Html表生成器推荐CSV吗?

时间:2010-05-14 20:45:47

标签: c# .net csv html-table

我需要解析一个非常简单的csv文件,该文件代表7列和3行。 .Net中有没有内置的功能,还是应该手动执行?

4 个答案:

答案 0 :(得分:2)

使用类似FileHelpers library的内容加载文件并将其转换为数据表,然后使用转发器以您想要的html格式发出行。

答案 1 :(得分:0)

怎么样:

public static DataTable csvToDataTable(string file, bool isRowOneHeader)
{

DataTable csvDataTable = new DataTable();

//no try/catch - add these in yourselfs or let exception happen
String[] csvData = File.ReadAllLines(HttpContext.Current.Server.MapPath(file));

//if no data in file ‘manually’ throw an exception
if (csvData.Length == 0)
{
    throw new Exception(”CSV File Appears to be Empty”);
}

String[] headings = csvData[0].Split(',');
int index = 0; //will be zero or one depending on isRowOneHeader

if(isRowOneHeader) //if first record lists headers
{
    index = 1; //so we won’t take headings as data

    //for each heading
    for(int i = 0; i < headings.Length; i++)
    {
        //replace spaces with underscores for column names
        headings[i] = headings[i].Replace(” “, “_”);

       //add a column for each heading
        csvDataTable.Columns.Add(headings[i], typeof(string));
   } 
}
else //if no headers just go for col1, col2 etc.
{
    for (int i = 0; i < headings.Length; i++)
    {
       //create arbitary column names
       csvDataTable.Columns.Add(”col”+(i+1).ToString(), typeof(string));
    }
}

//populate the DataTable
for (int i = index; i < csvData.Length; i++)
{
    //create new rows
    DataRow row = csvDataTable.NewRow();

    for (int j = 0; j < headings.Length; j++)
    {
         //fill them
         row[j] = csvData[i].Split(’,')[j];
    }

    //add rows to over DataTable
    csvDataTable.Rows.Add(row);
}

//return the CSV DataTable
return csvDataTable;

} 

答案 2 :(得分:0)

的powershell:

ps> import-csv foo.csv | convertto-html foo.html

- )

答案 3 :(得分:0)

事实证明这很有效:(好吧,'这是一个近似值)

protected void Page_Load(object sender, EventArgs e)
{
    List<List<string>> data = GetListFromCsv(this.DataFile);

    Table table = GetHtmlTable(data);

    this.plcDataTable.Controls.Add(table);
}

// get list of 'rows' (event though each row is just a list of strings)
public static List<List<string>> GetListFromCsv(string file)
{
    String[] csvData = File.ReadAllLines(file);

    List<string> rowList = new List<string>();

    if (csvData.Length == 0)
    {
        throw new Exception("CSV File Appears to be Empty");
    }

    var rows = (from r in csvData
                select r.Split(',').ToList()
               ).ToList();

    return rows;

}

private Table GetHtmlTable(List<List<string>> dataTable)
{
    List<TableRow> rows = new List<TableRow>();

    rows.AddRange(GetListOfRows(dataTable));

    Table table = new Table();
    table.Rows.AddRange(rows.ToArray());

    return table;
}

// convert the 'rows' to real rows.
public static IEnumerable<TableRow> GetListOfRows(List<List<string>> table)
{
    var rows = new List<TableRow>();

    foreach (var row in table
    {
        rows.Add(GetTableRow(row));
    }

    return rows;
}

private static TableRow GetTableRow(List<string> rows)
{
    TableRow row = new TableRow();

    row.Cells.Add(GetColumnOneCell(rows));
    row.Cells.AddRange(GetValueCells(rows).ToArray());

    return row;
}