需要将winform窗体中Listview中的数据通过SaveFileDialog控件导出为Excel格式或着txt格式的文件

解决方案 »

  1.   

    要么用第三方控件,要么自己把数据写为Excel格式
      

  2.   


    public void ExportExcel(ListView lv)
            {
                if (lv.Items == null) return;            string saveFileName = "";
                SaveFileDialog saveDialog = new SaveFileDialog();
                saveDialog.DefaultExt = "xls";
                saveDialog.Filter = "Excel文件|*.xls";
                saveDialog.FileName = DateTime.Now.ToString("yyyy-MM-dd");
                saveDialog.ShowDialog();
                saveFileName = saveDialog.FileName;
                if (saveFileName.IndexOf(":") < 0)
                    return;
                //这里直接删除,因为saveDialog已经做了文件是否存在的判断
                if (File.Exists(saveFileName)) File.Delete(saveFileName);
                Excel.Application xlApp = new Excel.Application();
                if (xlApp == null)
                {
                    MessageBox.Show("无法创建Excel对象,可能您的机器未安装Excel");
                    return;
                }
                Excel.Workbooks workbooks = xlApp.Workbooks;
                Excel.Workbook workbook = workbooks.Add(true);
                Excel.Worksheet worksheet = (Excel.Worksheet)workbook.Worksheets[1];
                xlApp.Visible = false;
                //填充列
                for (int i = 0; i < lv.Columns.Count; i++)
                {
                    worksheet.Cells[0, i + 1] = lv.Columns[i].Text.ToString();
                    ((Excel.Range)worksheet.Cells[1, i + 1]).Font.Bold = true;
                }
                //填充数据(这里分了两种情况,1:lv带CheckedBox,2:不带CheckedBox)            //带CheckedBoxes
                if (lv.CheckBoxes == true)
                {
                    int tmpCnt = 0;
                    for (int i = 0; i < lv.Items.Count; i++)
                    {
                        if (lv.Items[i].Checked == true)
                        {
                            for (int j = 0; j < lv.Columns.Count; j++)
                            {
                                if (j == 0)
                                {
                                    worksheet.Cells[2 + tmpCnt, j + 1] = lv.Items[i].Text.ToString();
                                    ((Excel.Range)worksheet.Cells[2 + tmpCnt, j + 1]).HorizontalAlignment = Excel.XlHAlign.xlHAlignLeft;
                                }
                                else
                                {
                                    worksheet.Cells[2 + tmpCnt, j + 1] = lv.Items[i].SubItems[j].Text.ToString();
                                    ((Excel.Range)worksheet.Cells[2 + tmpCnt, j + 1]).HorizontalAlignment = Excel.XlHAlign.xlHAlignLeft;
                                }
                            }
                            tmpCnt++;
                        }
                    }
                }
                else  //不带Checkedboxe
                {
                    for (int i = 0; i < lv.Items.Count; i++)
                    {
                        //for (int j = 0; j < lv.Columns.Count; j++)
                        //{
                        //    if (j == 0)
                        //    {
                                worksheet.Cells[1+i, 1] = lv.Items[i].Text.ToString();
                                ((Excel.Range)worksheet.Cells[1+i, 1]).HorizontalAlignment = Excel.XlHAlign.xlHAlignLeft;
                            //}
                            //else
                            //{
                            //    worksheet.Cells[2 + i, j + 1] = lv.Items[i].SubItems[j].Text.ToString();
                            //    ((Excel.Range)worksheet.Cells[2 + i, j + 1]).HorizontalAlignment = Excel.XlHAlign.xlHAlignLeft;
                            //}
                        //}
                    }
                }
                object missing = System.Reflection.Missing.Value;
                try
                {
                    workbook.Saved = true;
                    workbook.SaveAs(saveFileName, Excel.XlFileFormat.xlXMLSpreadsheet, missing, missing, false, false, Excel.XlSaveAsAccessMode.xlNoChange, missing, missing, missing, missing, missing);
                }
                catch (Exception e1)
                {
                    MessageBox.Show("导出文件时出错,文件可能正被打开!\n" + e1.Message);
                }
                finally
                {
                    xlApp.Quit();
                    System.GC.Collect();
                }
            }
      

  3.   

    我先试试,文件能不能自己起名字,还有就是也要能保存为.txt格式的
      

  4.   

    需要using 哪些命名空间
      

  5.   

    在补充一点CSV格式的文件是什么文件,怎么导入导出
      

  6.   

    Csv文件是以逗号分隔的一种类似Excel的文件.
    读取方法:
            /// <summary>
            /// 读取CSV文件
            /// </summary>
            /// <returns></returns>
            /// <author>yangy</author>
            public static List<string> GetCSVData(string filePath)
            {
                List<string> list = new List<string>();
                try
                {
                    System.IO.StreamReader reader = new System.IO.StreamReader(filePath);
                    reader.Peek();
                    while (reader.Peek() > 0)
                    {
                        string str = reader.ReadLine();
                        string[] split = str.Split(',');
                        if (split.Length > 0)
                        {
                            list.Add(str);
                        }
                    }
                }
                catch (Exception exp)
                {
                    WriteLogs.WriteError(exp, "Exception in Method xctc.ADAdvancedToolkit.ADHelpers.Utils.GetCSVData()。");
                    list = null;
                }
                return list;
            }