C# 将数据生成excel并储存

本文介绍如何将Listview中的数据导出到Excel文件,包括创建Excel文件、设置样式及合并单元格等操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这里说一下怎么将数据生成excel并储存

有以下几步:(默认已有listview控件情况下)
1.定义一个string的二维数组_data用来储存listview内的项和其子项
2.弹出dialog对话框,编辑储存位置和文件名。将文件名储存到string path
3.知道储存路径后,新建workbook工作薄,新建worksheet工作表,新建cells表格
4.将_data数组内数据存入cells表格,并处理cells内格式style
5.try储存path文件,catch文件被占用出错情况。输出日志信息(时间+文件名)
代码部分。需要添加的引用名:Aspose.Cells.DLL,这个网上可以下载到。
1添加指令集

<span style="white-space:pre">    </span>using System.IO;  
<span style="white-space:pre">    </span>using Aspose.Cells;  

2按照文最上面的步骤来写储存函数

[objc] view plain copy print?
public void SaveToExcel(ListView listview,List<int> columnwidth,string title)  
{  
    string path;  
    SaveFileDialog filedialog = new SaveFileDialog();  
    filedialog.Filter = "Excel file(*,xls)|*.xls";  
    if (filedialog.ShowDialog() == DialogResult.OK)  
    {  
        path = filedialog.FileName;  
        //新建excel  
        Workbook wb = new Workbook();  
        Worksheet ws = wb.Worksheets[0];  
        Cells cell = ws.Cells;  
        //储存数据到数组  
        string[,] _dataReport = new string[listview.Items.Count, listview.Columns.Count];  
        for (int i = 0; i < listview.Items.Count; i++)  
        {  
            for (int j = 0; j < listview.Columns.Count; j++)  
            {  
                _dataReport[i,j] = listview.Items[i].SubItems[j].Text.ToString();  
            }  
        }  
        Range range1 = cell.CreateRange(0, 0, 2, listview.Columns.Count);  
        range1.Merge();  
        //标题style  
        cell.SetRowHeight(0,40);  
        Style style1 = wb.Styles[wb.Styles.Add()];  
        style1.HorizontalAlignment = TextAlignmentType.Center;  
        style1.Font.Name = "宋体";  
        style1.Font.IsBold = true;  
        style1.Font.Size = 20;  
        //内容style  
        Style style2 = wb.Styles[wb.Styles.Add()];  
        style2.HorizontalAlignment = TextAlignmentType.Center;  
        style2.Font.Size = 14;  
        //储存标题和内容(A1和此时(0,0)一样)  
        cell["A1"].PutValue(title);  
        cell["A1"].SetStyle(style1);  
        //第二行内容  
        cell[2, 0].PutValue("队伍名称");  
        cell[2, 1].PutValue(textBox10.Text.ToString() + "队");  
        cell[2, 2].PutValue(textBox11.Text.ToString() + "队");  
        cell[2, 0].SetStyle(style2);  
        cell[2, 1].SetStyle(style2);  
        cell[2, 2].SetStyle(style2);  
        //第三行以后内容  
        int posStart = 3;  
        for (int i = 0; i < listview.Items.Count; i++)  
        {  
            for (int j = 0; j < listview.Columns.Count; j++)  
            {  
                cell[i + posStart, j].PutValue(_dataReport[i, j].ToString());  
                cell[i + posStart, j].SetStyle(style2);  
            }  
        }  
        //合并单元格显示时间(注意合并完之后,对于本身的行变量和列变量的计数并没有变化。)(B5和此时(4,1)一样)  
        Range range2 = cell.CreateRange(4, 1, 1, 2);  
        range2.Merge();  
        cell["B5"].PutValue(_dataReport[listview.Items.Count - 1,listview.Columns.Count - 1].ToString());  
        cell["B5"].SetStyle(style2);  
        for (int i = 0; i < listview.Columns.Count; i++)  
        {  
            cell.SetColumnWidth(i, Convert.ToDouble(columnwidth[i].ToString()));  
        }  
        //储存  
        try  
        {  
            wb.Save(path);  
            MessageBox.Show("成功");  
            textBox5.AppendText(DateTime.Now.ToString() + " 储存成功。位置:" + path.ToString() + "\r\n");  
        }  
        catch (Exception e)  
        {  
            MessageBox.Show("失败,原因:" + e);  
            textBox5.AppendText(DateTime.Now.ToString()+"储存失败。");  
        }  
    }  
}  

有几个点解释一下:
SaveFileDiallog.ShowDialog可以弹出另存为的对话框
SaveFileDialog.Filter是文件类型
SaveFileDialog.Filename是文件名,其中包含文件的名字和路径
SaveFileDialog.ShowDialog的返回值是DialogResult.OK,即确认储存文件名和路径和类型

储存数组有string[,]而不是string[][],两者是有区别的,前者是一个string的二维数组,而后者是一个string[]的一位数组。
例如:

[objc] view plain copy print?
[qw,qwe,qwe  
qwe,rr,rwqwe  
eqw,ew,ewq]  

[objc] view plain copy print?
[[qw,qwe,qwe]  
[qwe,rr,rwqwe]  
[eqw,ew,ewq]]  

的区别。

合并单元格函数的入口参数含义

[objc] view plain copy print?
Range range2 = cell.CreateRange(4, 1, 1, 2);  
range2.Merge();  

第一句话的CreateRange中(4,1,1,2)表示,从excel中第4+1行第1+1列开始,向下1行,向右2列。

当同名文件名被占用的时候,储存save()会出错,这时候需要catch(exception e)进行一下提示和处理了。这里写代码片

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值