首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

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

2013-03-14 
操作excel文件怎么在末尾追加?private void ExportToExcel(string FileName){if (FileName.IndexOf(.)

操作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万条再写,这样链表是不是太大了?
而且导出是允许中断的,这样全部写到链表中就不太好了吧!
假如中间内容一直都是变化的那导出的意思在哪……

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

热点排行