C#将数据⽣成excel并储存
最近在做⼀个室内CS的项⽬,上位机需要⽤的东西⽐较多。
两个队伍分数结算出来后,储存成绩,打印成绩便是必不可少的⼀个内容。这⾥说⼀下怎么将数据⽣成excel并储存
有以下⼏步:(默认已有listview控件情况下)
1.定义⼀个string的⼆维数组_data⽤来储存listview内的项和其⼦项
2.弹出dialog对话框,编辑储存位置和⽂件名。将⽂件名储存到string path
3.知道储存路径后,新建workbook⼯作薄,新建worksheet⼯作表,新建cells表格
4.将_data数组内数据存⼊cells表格,并处理cells内格式style
<储存path⽂件,catch⽂件被占⽤出错情况。输出⽇志信息(时间+⽂件名)
具体的操作步骤:
先完成控件的设置:
1拖取listview,如果⼦项需要显⽰⽹格线的画,在listview中到属性GridLines=True
2编辑项和列,可能有的⼈不到如何编辑⼦项,这⾥图⽚显⽰⼀下
3视图⽤detials
4按钮控件没什么好说的
代码部分。需要添加的引⽤名:Aspose.Cells.DLL,这个⽹上可以下载到。1添加指令集
<span > </span>using System.IO;
<span > </span>using Aspose.Cells;
2按照⽂最上⾯的步骤来写储存函数
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);
/
/第⼆⾏内容
excel listview控件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, 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)进⾏⼀下提⽰和处理了。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论