读书人

操作excel文件如何在末尾追加

发布时间: 2013-03-14 10:33:15 作者: rapoo

操作excel文件怎么在末尾追加?


private void ExportToExcel(string FileName)
{
if (FileName.IndexOf(".") <= 0)
{
FileName = FileName + ".xls";
}
else
{
string[] str = FileName.Split('.');
if (str.Length > 2)
{
FileName = str[0] + str[str.Length - 1];
}
}


Excel.Application app;
try
{
app = new Excel.Application();
}
catch
{
ClsCommFuncs.Alert("没有安装Excel程序或者安装错误");
return;
}
app.Workbooks.Add(true);
app.Visible = false;

Excel.Workbooks books = (Excel.Workbooks)app.Workbooks;
Excel.Workbook book = (Excel.Workbook)books.Add(Type.Missing);

int iget = 1;
int dwindex = 0;
//写头
if (panelHide1.Visible == true)
{
foreach (DataGridViewColumn datcol in dgvLog.Columns)
{
app.Cells[iget, dwindex + 1] = datcol.HeaderText;
dwindex++;


}
}
else
{
app.Cells[iget, 1] = dgvLog.Columns[0].HeaderText;
app.Cells[iget, 2] = dgvLog.Columns[1].HeaderText;
app.Cells[iget, 3] = dgvLog.Columns[2].HeaderText;
app.Cells[iget, 4] = dgvLog.Columns[5].HeaderText;
}

//写内容
int nIndex = 0;
foreach (TLogData t in m_tLogDataList)
{
iget++;

app.Cells[iget, 1] = (++nIndex).ToString();
app.Cells[iget, 2] = t.GetTime();
app.Cells[iget, 3] = t.GetLogType();
if (panelHide1.Visible == true)
{
app.Cells[iget, 4] = t.GetLogCategory();
app.Cells[iget, 5] = t.GetUserName();
app.Cells[iget, 6] = t.GetLogDecs();
}
else
{
app.Cells[iget, 4] = t.GetLogDecs();
}
}

app.Cells.EntireColumn.AutoFit();

try
{
book.SaveAs(FileName, Type.Missing, Type.Missing, Type.Missing,
Type.Missing, Type.Missing, Excel.XlSaveAsAccessMode.xlExclusive,


Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing);

}
catch
{
ClsCommFuncs.Alert("导出失败,确认文件没有打开或Excel安装成功");
}

book.Close(false, Type.Missing, Type.Missing);
books.Close();
app.Quit();
GC.Collect();


}



其中写内容的这么一段需要不断的写,也就是m_tLogDataList会不断的更新

//写内容
int nIndex = 0;
foreach (TLogData t in m_tLogDataList)
{
iget++;

app.Cells[iget, 1] = (++nIndex).ToString();
app.Cells[iget, 2] = t.GetTime();
app.Cells[iget, 3] = t.GetLogType();
if (panelHide1.Visible == true)
{
app.Cells[iget, 4] = t.GetLogCategory();
app.Cells[iget, 5] = t.GetUserName();
app.Cells[iget, 6] = t.GetLogDecs();
}
else
{
app.Cells[iget, 4] = t.GetLogDecs();
}
}


我尝试将首尾以及写内容的分成三个部分,这样写内容的那段就可以重复使用,可是总是报“因为应用程序正在发送一个输入同步呼叫,所以无法执行传出的呼叫”,这样的错误!
不知道怎么解决了,请各位帮忙看看!
[解决办法]
我是笨方法.


全部数据变成DataTable.追加完后.再变成Xls
[解决办法]

引用:
我是笨方法.
全部数据变成DataTable.追加完后.再变成Xls

看错.不是普通的格式.不适合
[解决办法]
每次写完记录下Cells[iget, 4]
下次写时 从iget+1开始写
[解决办法]
引用:
引用:建议像这种情况可以在导出时在数据集里将要加的内容加进去。
可能有10万条数据的,但是服务器一次只返回15条,如果攒到10万条再写,这样链表是不是太大了?
而且导出是允许中断的,这样全部写到链表中就不太好了吧!

假如中间内容一直都是变化的那导出的意思在哪里?
不太理解业务要求。
[解决办法]
引用:
引用:引用:引用:建议像这种情况可以在导出时在数据集里将要加的内容加进去。
可能有10万条数据的,但是服务器一次只返回15条,如果攒到10万条再写,这样链表是不是太大了?
而且导出是允许中断的,这样全部写到链表中就不太好了吧!
假如中间内容一直都是变化的那导出的意思在哪……

这样的话就关闭不了了。没办法真正完成导出操作。可以将导出的内容做标识,然后再导出一部分。将内容导成几个文件。

读书人网 >C#

热点推荐