C# 将数据生成excel并储存

最近在做一个室内CS的项目,上位机需要用的东西比较多。

两个队伍分数结算出来后,储存成绩,打印成绩便是必不可少的一个内容。

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


有以下几步:(默认已有listview控件情况下)

1.定义一个string的二维数组_data用来储存listview内的项和其子项

2.弹出dialog对话框,编辑储存位置和文件名。将文件名储存到string path

3.知道储存路径后,新建workbook工作薄,新建worksheet工作表,新建cells表格

4.将_data数组内数据存入cells表格,并处理cells内格式style

5.try储存path文件,catch文件被占用出错情况。输出日志信息(时间+文件名)


具体的操作步骤:

先完成控件的设置:
1拖取listview,如果子项需要显示网格线的画,在listview中找到属性GridLines=True

C# 将数据生成excel并储存_第1张图片

2编辑项和列,可能有的人找不到如何编辑子项,这里图片显示一下

C# 将数据生成excel并储存_第2张图片

3视图用detials

C# 将数据生成excel并储存_第3张图片

4按钮控件没什么好说的


代码部分。需要添加的引用名:Aspose.Cells.DLL,这个网上可以下载到。

1添加指令集

	using System.IO;
	using Aspose.Cells;

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

        public void SaveToExcel(ListView listview,List 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[]的一位数组。

例如:

[qw,qwe,qwe
qwe,rr,rwqwe
eqw,ew,ewq]

[[qw,qwe,qwe]
[qwe,rr,rwqwe]
[eqw,ew,ewq]]


的区别。


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

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)进行一下提示和处理了。


你可能感兴趣的:(上位机)