#215分 |
直接save呗,
就是保存和另存为的区别 |
#3 |
用save还真解决了。
还提个问题:如何找到excel中已有数据的最后一行? |
#4 |
那要看你用的什么方式读excel了
如果是用oledb,你只能先select出来,变成datatable,然后判断datatable的行数,再返回头去操作excel 如果是用NPOI,有属性直接可以找到,FirstRow,LastRow |
#55分 |
此外,excel里的行数,和通常所说的行数,有可能是不一样的
比如你在excel里添加了100行,然后直接删除数据,但并没有删除行 那么读出来的时候,还是会认为里面有100行数据,虽然每个单元格都是空字符串 如果你要判断有效数据的最后一行,只能从最后往前循环,看到哪一行数据不为空 |
#6 |
对excel数据转换格式后保存文件
private void btn_Excel_Click(object sender, EventArgs e) { if (dgv_Info.Rows.Count == 0)//判断是否有数据 return;//返回 Microsoft.Office.Interop.Excel.Application excel = new Microsoft.Office.Interop.Excel.Application();//实例化Excel对象 excel.Application.Workbooks.Add(true);//在Excel中添加一个工作簿 excel.Visible = true;//设置Excel显示 //生成字段名称 for (int i = 0; i < dgv_Info.ColumnCount; i++) { excel.Cells[1, i + 1] = dgv_Info.Columns[i].HeaderText;//将数据表格控件中的列表头填充到Excel中 } //填充数据 for (int i = 0; i < dgv_Info.RowCount – 1; i++)//遍历数据表格控件的所有行 { for (int j = 0; j < dgv_Info.ColumnCount; j++)//遍历数据表格控件的所有列 { if (dgv_Info[j, i].ValueType == typeof(string))//判断遍历到的数据是否是字符串类型 { excel.Cells[i + 2, j + 1] = ““” + dgv_Info[j, i].Value.ToString().Trim() + “””;//格式化为字符串类型并填充Excel表格 } else if (dgv_Info[j, i].ValueType == typeof(Int16) || dgv_Info[j, i].ValueType == typeof(Int32))//判断遍历到的数据是否是16位或者32位数字类型 { excel.Cells[i + 2, j + 1] = Convert.ToInt32(dgv_Info[j, i].Value).ToString(“N”);//格式化为32位数字类型并填充Excel表格 } else if (dgv_Info[j, i].ValueType == typeof(Int64))//判断遍历到的数据是否是64位数字类型 { excel.Cells[i + 2, j + 1] = Convert.ToInt64(dgv_Info[j, i].Value).ToString(“N”);//格式化为64位数字类型并填充Excel表格 } else if (dgv_Info[j, i].ValueType == typeof(DateTime))//判断遍历到的数据是否是日期类型 { excel.Cells[i + 2, j + 1] = Convert.ToDateTime(dgv_Info[j, i].Value).ToLongDateString();//格式化为长日期形式并填充Excel表格 } else { excel.Cells[i + 2, j + 1] = dgv_Info[j, i].Value.ToString();//填充Excel表格 } } } } |
#7 |
是不是用只读打开的?
请参看下:http://blog.163.com/liuqiuliang_yss.popo/blog/static/4581691020096652816495/ |
#8 |
用的下面的语句获得了excel使用了的行数
Range range = sheet.UsedRange; int usedRowCount = range.Rows.Count; |
#10 |
你是如何解决的,可否指点一下?excel文件已经被打开了,表示被占用,如果编辑后再打开会提示被占用。
|