关于将数据写入Excel的问题

redfield123 2011-09-19 09:36:15
private void WriteExcel(string filepath, ArrayList pointlist)//将数据导出到Excel中
{
try
{
Excel.Application excApp = new Microsoft.Office.Interop.Excel.Application();
excApp.Visible = false;
object oMissing = Missing.Value;
Excel.Worksheet worksheet = (Excel.Worksheet)excApp.Workbooks.Open(filepath,oMissing,oMissing,oMissing,oMissing,oMissing,oMissing,oMissing,oMissing,oMissing,oMissing,oMissing,oMissing,oMissing,oMissing).Worksheets[1];
Excel.Range rng;

for (int i = 0; i < pointlist.Count; i++)
{
PointClass point=new PointClass();
point = (PointClass)pointlist[i];
for (int j = 1; j <= worksheet.UsedRange.Columns.Count; j++)
{
if (((Excel.Range)worksheet.Cells[1, j]).Text.ToString() == "NAME")
{
rng = worksheet.get_Range(worksheet.Cells[i+2, j], oMissing);
rng.Value2 = point.StationName;
}

if (((Excel.Range)worksheet.Cells[1, j]).Text.ToString() == "TYPE")
{
rng = worksheet.get_Range(worksheet.Cells[i + 2, j], oMissing);
rng.Value2 = point.IOType;
}

if (((Excel.Range)worksheet.Cells[1, j]).Text.ToString() == "ADDR")
{
rng = worksheet.get_Range(worksheet.Cells[i + 2, j], oMissing);
rng.Value2 = point.Add;
}
}
}

worksheet.SaveAs(filepath, oMissing, oMissing, oMissing, oMissing, oMissing, oMissing, oMissing, oMissing, oMissing);

KillExcelApp(excApp, worksheet);
}

catch (Exception ex)
{
MessageBox.Show(ex.Message);
}

}

rng = worksheet.get_Range(worksheet.Cells[i+2, j], oMissing);
这句出错
关于Excel.Range类型和get_Range到底怎么用啊?
...全文
76 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
redfield123 2011-09-20
  • 打赏
  • 举报
回复
明白了,谢谢!

Range类型可以是一个单元格,也可以是一行或者一列,还可以是一个区域。

get_Range就是获取一个单元区域,返回值为Range类型。

Workboos,Workbook,Worksheet,Range,Cells各个对象要搞清楚,类型不要整错了。
shupo 2011-09-20
  • 打赏
  • 举报
回复
同样一直迷惑中,帮顶
lsz2012 2011-09-20
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 redfield123 的回复:]
MSDN和Baidu都找了,但是还是不明白get_Range怎么用
[/Quote]

rng = worksheet.get_Range(worksheet.Cells[i+2, j], oMissing);
这样写不对
应该这样写
rng = worksheet.get_Range(worksheet.Cells[i, j],worksheet.Cells[i+2, j]);

get_Range(worksheet.cells[行,列],worksheet.cells[行,列])
例如在Excel 选中第(A1,B4)范围 :
worksheet.get_Range(worksheet.Cells[1,1],worksheet.Cells[4,2])
萧炎 2011-09-20
  • 打赏
  • 举报
回复
LZ咋的意思就是导出个嘛

//我做的导出LZ看看
/// <param name="mydgv"></param>
public void Exportdatagridviewtoexcel(DataGridView mydgv)
{
if (mydgv.Rows.Count == 0)
{
MessageBox.Show(" 没有数据可供导出!", "提示信息", MessageBoxButtons.OK, MessageBoxIcon.Information);
return;
}
else
{
SaveFileDialog savedialog = new SaveFileDialog();
savedialog.DefaultExt = "xlsx";
savedialog.Filter = "microsoft office execl files (*.xlsx)|*.xlsx";
savedialog.FilterIndex = 0;
savedialog.RestoreDirectory = true;
savedialog.Title = "导出数据到excel表格";
savedialog.ShowDialog();
if (savedialog.FileName.IndexOf(":") < 0) return; //被点了取消
//Microsoft.office.interop.excel.application xlapp = new microsoft.office.interop.excel.application();
Microsoft.Office.Interop.Excel.Application xlapp = new Microsoft.Office.Interop.Excel.Application();
if (xlapp == null)
{
MessageBox.Show("可能您的机子未安装excel,无法创建excel对象!", "系统提示 ", MessageBoxButtons.OK, MessageBoxIcon.Error);
return;
}

Microsoft.Office.Interop.Excel.Workbooks workbooks = xlapp.Workbooks;
Microsoft.Office.Interop.Excel.Workbook workbook = workbooks.Add(Microsoft.Office.Interop.Excel.XlWBATemplate.xlWBATWorksheet);
Microsoft.Office.Interop.Excel.Worksheet worksheet = (Microsoft.Office.Interop.Excel.Worksheet)workbook.Worksheets[1];//取得sheet1
//定义表格内数据的行数和列数
int rowscount = mydgv.Rows.Count;
int colscount = mydgv.Columns.Count;
//行数不可以大于65536
if (rowscount > 65536)
{
MessageBox.Show("数据行记录超过65536行,不能保存!", "系统提示 ", MessageBoxButtons.OK, MessageBoxIcon.Information);
return;
}
//列数不可以大于255
if (colscount > 256)
{
MessageBox.Show("数据列记录超过256列,不能保存!", "系统提示 ", MessageBoxButtons.OK, MessageBoxIcon.Information);
return;
}
//写入标题
for (int i = 0; i < mydgv.ColumnCount; i++)
{
worksheet.Cells[1, i + 1] = mydgv.Columns[i].HeaderText;
}
//写入数值
for (int r = 0; r < mydgv.Rows.Count; r++)
{
for (int i = 0; i < mydgv.ColumnCount; i++)
{
if (mydgv[i, r].ValueType == typeof(string))
{
worksheet.Cells[r + 2, i + 1] = "" + mydgv.Rows[r].Cells[i].Value;//将长数值转换成文本
}
else
{
worksheet.Cells[r + 2, i + 1] = mydgv.Rows[r].Cells[i].Value;
}
}
System.Windows.Forms.Application.DoEvents();
}
worksheet.Columns.EntireColumn.AutoFit();//列宽自适应
if (savedialog.FileName != "")
{
try
{
workbook.Saved = true;
workbook.SaveCopyAs(savedialog.FileName);
}
catch (Exception ex)
{
MessageBox.Show("导出文件时出错,文件可能正被打开!..." + ex.Message, "系统提示 ", MessageBoxButtons.OK, MessageBoxIcon.Error);
}

}
//GC.Collect();//强行销毁
MessageBox.Show("数据导出成功! ", "提示信息", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
}
oliver2378 2011-09-20
  • 打赏
  • 举报
回复
同样一直迷惑中,帮顶
redfield123 2011-09-19
  • 打赏
  • 举报
回复
MSDN和Baidu都找了,但是还是不明白get_Range怎么用

110,534

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧