DataGridView生成CSV,XML 和 EXCEL文件

这里提到了使用DataGridView 去生成三种不同类型的文件,其实生成EXCEL我曾经遇到过三种,希望这些对广大开发者有帮助。并且当中我还列出一些如何通过xls导入到datagridview,很多使用该winform技术的同仁一定很熟悉这种方法。

1.首先是如何将数据从 xls文件加载到winform的DataGridView控件中。

 private void button1_Click(object sender, EventArgs e)
        {
            OpenFileDialog fileDLG = new OpenFileDialog();
            fileDLG.Title = "Open Excel File";
            fileDLG.Filter = "Excel Files|*.xls;*.xlsx";
            fileDLG.InitialDirectory = @"C:\Users\...\Desktop\";
            if (fileDLG.ShowDialog() == DialogResult.OK)
            {
                string filename = System.IO.Path.GetFileName(fileDLG.FileName);
                string path = System.IO.Path.GetDirectoryName(fileDLG.FileName);
                excelLocationTB.Text = @path + "\\" + filename;
                string ExcelFile = @excelLocationTB.Text;
                if (!File.Exists(ExcelFile))
                    MessageBox.Show(String.Format("File {0} does not Exist", ExcelFile));

                OleDbConnection theConnection = new OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + ExcelFile + ";Extended Properties=Excel 12.0;");
                theConnection.Open();
                OleDbDataAdapter theDataAdapter = new OleDbDataAdapter("SELECT * FROM [Sheet1$]", theConnection);
                DataSet DS = new DataSet();
                theDataAdapter.Fill(DS, "ExcelInfo");
                dataGridView1.DataSource = DS.Tables["ExcelInfo"];
                formatDataGrid();
                MessageBox.Show("Excel File Loaded");
                toolStripProgressBar1.Value += 0;
            }
        }
              private void formatDataGrid()
           {
              dataGridView1.ColumnHeadersVisible = true;
              dataGridView1.Columns[0].Name = "Path Name";
              dataGridView1.AutoResizeColumns(DataGridViewAutoSizeColumnsMode.AllCellsExceptHeader);
            }


 

2.接下来如何将DataGridView控件中的数据保存到CSV格式的文件中。

 

if (dataGridView1.Rows.Count == 0)
                  {
                      MessageBox.Show("No data available!", "Prompt", MessageBoxButtons.OK, MessageBoxIcon.Information);
                      return;
                  }
                  else
                  {
                      SaveFileDialog saveFileDialog = new SaveFileDialog();
                      saveFileDialog.Filter = "CSV files (*.csv)|*.csv";
                      saveFileDialog.FilterIndex = 0;
                      saveFileDialog.RestoreDirectory = true;
                      saveFileDialog.CreatePrompt = true;
                      saveFileDialog.FileName = null;
                      saveFileDialog.Title = "Save path of the file to be exported";
                      if (saveFileDialog.ShowDialog() == DialogResult.OK)
                      {
                          Stream myStream = saveFileDialog.OpenFile();
                          StreamWriter sw = new StreamWriter(myStream, System.Text.Encoding.GetEncoding(-0));
                          string strLine = "";
                          try
                          {
                              //Write in the headers of the columns.
                              for (int i = 0; i < dataGridView1.ColumnCount; i++)
                              {
                                  if (i > 0)
                                      strLine += ",";
                                  strLine += dataGridView1.Columns[i].HeaderText;
                              }
                              strLine.Remove(strLine.Length - 1);
                              sw.WriteLine(strLine);
                              strLine = "";
                              //Write in the content of the columns.
                              for (int j = 0; j < dataGridView1.Rows.Count; j++)
                              {
                                  strLine = "";
                                  for (int k = 0; k < dataGridView1.Columns.Count; k++)
                                  {
                                      if (k > 0)
                                          strLine += ",";
                                      if (dataGridView1.Rows[j].Cells[k].Value == null)
                                          strLine += "";
                                      else
                                      {
                                          string m = dataGridView1.Rows[j].Cells[k].Value.ToString().Trim();
                                          strLine += m.Replace(",", ",");
                                      }
                                  }
                                  strLine.Remove(strLine.Length - 1);
                                  sw.WriteLine(strLine);
                                  //Update the Progess Bar.
                                  toolStripProgressBar1.Value = 100 * (j + 1) / dataGridView1.Rows.Count;
                              }
                              sw.Close();
                              myStream.Close();
                              MessageBox.Show("Data has been exported to:" + saveFileDialog.FileName.ToString(), "Exporting Completed", MessageBoxButtons.OK, MessageBoxIcon.Information);
                              toolStripProgressBar1.Value = 0;
                          }
                          catch (Exception ex)
                          {
                              MessageBox.Show(ex.Message, "Exporting Error", MessageBoxButtons.OK, MessageBoxIcon.Information);
                          }
                      }
                  }


 

3.接下是如何保存到XML,这里提供了两种方法。

                   Output to XML file format using StreamWriting Object.
                  if (dataGridView1.Rows.Count == 0)
                  {
                      MessageBox.Show("No data available!", "Prompt", MessageBoxButtons.OK, MessageBoxIcon.Information);
                      return;
                  }
                  else
                  {
                      SaveFileDialog saveFileDialog = new SaveFileDialog();
                      saveFileDialog.Filter = "XML files (*.xml)|*.xml";
                      saveFileDialog.FilterIndex = 0;
                      saveFileDialog.RestoreDirectory = true;
                      saveFileDialog.CreatePrompt = true;
                      saveFileDialog.FileName = null;
                      saveFileDialog.Title = "Save path of the file to be exported";
                      if (saveFileDialog.ShowDialog() == DialogResult.OK)
                      {
                          Stream myStream = saveFileDialog.OpenFile();
                          StreamWriter sw = new StreamWriter(myStream, System.Text.Encoding.GetEncoding(-0));
                          try
                          {
                              sw.WriteLine("<?xml version=\"1.0\" encoding=\"utf-8\" ?>");
                              sw.WriteLine("<NewXML>");

                              for (int i = 0; i < dataGridView1.Rows.Count - 1; i++)
                              {
                                  sw.WriteLine("<Row" + i + ">");
                                  for (int j = 0; j < dataGridView1.Columns.Count; j++)
                                      sw.WriteLine("<" + dataGridView1.Columns[j].HeaderText + ">" + dataGridView1.Rows[i].Cells[j].Value.ToString().Trim() + "</" + dataGridView1.Columns[j].HeaderText + ">");
                                  sw.WriteLine("</Row" + i + ">");
                                  //Update the Progess Bar.
                                  toolStripProgressBar1.Value = 100 * (i + 1) / (dataGridView1.Rows.Count - 1);
                              }
                              sw.WriteLine("</NewXML>");
                              sw.Close();
                              myStream.Close();
                              MessageBox.Show("Data has been exported to:" + saveFileDialog.FileName.ToString(), "Exporting Completed", MessageBoxButtons.OK, MessageBoxIcon.Information);
                              toolStripProgressBar1.Value = 0;
                          }
                          catch (Exception ex)
                          {
                              MessageBox.Show(ex.Message, "Exporting Error", MessageBoxButtons.OK, MessageBoxIcon.Information);
                          }
                      }
                  }

上面是hard code写法,用XMLELEMENT也能达到同样目的。

 

 if (dataGridView1.Rows.Count == 0)
                  {
                      MessageBox.Show("No data available!", "Prompt", MessageBoxButtons.OK, MessageBoxIcon.Information);
                      return;
                  }
                  else
                  {
                      SaveFileDialog saveFileDialog = new SaveFileDialog();
                      saveFileDialog.Filter = "XML files (*.xml)|*.xml";
                      saveFileDialog.FilterIndex = 0;
                      saveFileDialog.RestoreDirectory = true;
                      saveFileDialog.CreatePrompt = true;
                      saveFileDialog.FileName = null;
                      saveFileDialog.Title = "Save path of the file to be exported";
                      if (saveFileDialog.ShowDialog() == DialogResult.OK)
                      {
                          string str = saveFileDialog.FileName;
                         XmlDocument doc = new XmlDocument();
                          XmlNode docNode = doc.CreateXmlDeclaration("1.0", "UTF-8", null);
                               doc.AppendChild(docNode);

                            // Create and insert a new element.
                            XmlNode rowsNode = doc.CreateElement("NewXML");
                            doc.AppendChild(rowsNode);

                          try
                          {
                              for (int i = 0; i < dataGridView1.Rows.Count - 1; i++)
                              {
                                  XmlNode rowNode = doc.CreateElement("row" + i);


                                  for (int j = 0; j < dataGridView1.Columns.Count; j++)
                                  {

                                      XmlAttribute rowAttribute = doc.CreateAttribute(dataGridView1.Columns[j].HeaderText);
                                        rowAttribute.Value =dataGridView1.Rows[i].Cells[j].Value.ToString().Trim() ;
                                        rowNode.Attributes.Append(rowAttribute);
                                        rowsNode.AppendChild(rowNode);
                                  }
                                  //Update the Progess Bar.
                                  toolStripProgressBar1.Value = 100 * (i + 1) / (dataGridView1.Rows.Count - 1);

                              }
                              doc.Save(str);

                          }
                          catch (Exception ex)
                          {
                              MessageBox.Show(ex.Message, "Exporting Error", MessageBoxButtons.OK, MessageBoxIcon.Information);
                          }
                      }
                  }


3.最后提供保存到EXCEL的三种方法,第一种是hardcode,第二种是openxml pacage,第三种是传统的操作Excl interp的貌似是 Automatic方法。

                      if (dataGridView1.Rows.Count == 0)
                      {
                          MessageBox.Show("No data available!", "Prompt", MessageBoxButtons.OK, MessageBoxIcon.Information);
                          return;
                      }
                      else
                      {
                          SaveFileDialog saveFileDialog = new SaveFileDialog();
                          saveFileDialog.Filter = "Execl files (*.xls)|*.xls";
                          saveFileDialog.FilterIndex = 0;
                          saveFileDialog.RestoreDirectory = true;
                          saveFileDialog.CreatePrompt = true;
                          saveFileDialog.FileName = null;
                          saveFileDialog.Title = "Save path of the file to be exported";
                          if (saveFileDialog.ShowDialog() == DialogResult.OK)
                          {
                              Stream myStream = saveFileDialog.OpenFile();
                              StreamWriter sw = new StreamWriter(myStream, System.Text.Encoding.GetEncoding(-0));
                              string strLine = "";
                              try
                              {
                                  //Write in the headers of the columns.
                                  for (int i = 0; i < dataGridView1.ColumnCount; i++)
                                  {
                                      if (i > 0)
                                          strLine += Convert.ToChar(9);
                                      strLine += dataGridView1.Columns[i].HeaderText;
                                  }
                                  strLine.Remove(strLine.Length - 1);
                                  sw.WriteLine(strLine);
                                  strLine = "";
                                  //Write in the content of the columns.
                                  for (int j = 0; j < dataGridView1.Rows.Count; j++)
                                  {
                                      strLine = "";
                                      for (int k = 0; k < dataGridView1.Columns.Count; k++)
                                      {
                                          if (k > 0)
                                              strLine += Convert.ToChar(9);
                                          if (dataGridView1.Rows[j].Cells[k].Value == null)
                                              strLine += "";
                                          else
                                          {
                                              string m = dataGridView1.Rows[j].Cells[k].Value.ToString().Trim();
                                              strLine += m.Replace(",", ",");
                                          }
                                      }
                                      strLine.Remove(strLine.Length - 1);
                                      sw.WriteLine(strLine);
                                      //Update the Progess Bar.
                                      toolStripProgressBar1.Value = 100 * (j + 1) / dataGridView1.Rows.Count;
                                  }
                                  sw.Close();
                                  myStream.Close();
                                  MessageBox.Show("Data has been exported to:" + saveFileDialog.FileName.ToString(), "Exporting Completed", MessageBoxButtons.OK, MessageBoxIcon.Information);
                                  toolStripProgressBar1.Value = 0;
                              }
                              catch (Exception ex)
                              {
                                  MessageBox.Show(ex.Message, "Exporting Error", MessageBoxButtons.OK, MessageBoxIcon.Information);
                              }
                          }
                      }


Automatic:

                          int iRows = 0;
                          int iCols = 0;
                          int iTrueCols = 0;
                          Microsoft.Office.Interop.Excel.Application app = new Microsoft.Office.Interop.Excel.Application();
                          Microsoft.Office.Interop.Excel.Workbook wb = app.Workbooks.Add(System.Reflection.Missing.Value);
                          Microsoft.Office.Interop.Excel.Worksheet ws = null;

                          if (wb.Worksheets.Count > 0)
                          {
                              ws = (Microsoft.Office.Interop.Excel.Worksheet)wb.Worksheets.get_Item(1);
                          }
                          else
                          {
                              wb.Worksheets.Add(System.Reflection.Missing.Value, System.Reflection.Missing.Value, System.Reflection.Missing.Value, System.Reflection.Missing.Value);
                              ws = (Microsoft.Office.Interop.Excel.Worksheet)wb.Worksheets.get_Item(1);
                          }

                          if (ws != null)
                          {
                              ws.Name = "SheetName";

                              iRows = dataGridView1.Rows.Count;      //加上列头行  
                              iTrueCols = dataGridView1.Columns.Count;   //包含隐藏的列,一共有多少列  

                              //求列数,省略Visible = false的列  
                              for (int i = 0; i < dataGridView1.Columns.Count; i++)
                              {
                                  if (dataGridView1.Columns[i].Visible) iCols++;
                              }

                              string[,] dimArray = new string[iRows + 1, iCols];

                              for (int j = 0, k = 0; j < iTrueCols; j++)
                              {
                                  //省略Visible = false的列  
                                  if (dataGridView1.Columns[j].Visible)
                                  {
                                      dimArray[0, k] = dataGridView1.Columns[j].HeaderText;
                                      k++;
                                  }
                              }

                              for (int i = 0; i < iRows; i++)
                              {
                                  for (int j = 0, k = 0; j < iTrueCols; j++)
                                  {
                                      //省略Visible = false的列  
                                      if (dataGridView1.Columns[j].Visible)
                                      {
                                          if (dataGridView1.Rows[i].Cells[j].Value != null)
                                              dimArray[i + 1, k] = dataGridView1.Rows[i].Cells[j].Value.ToString();
                                          else
                                              dimArray[i + 1, k] = "";
                                          k++;

                                      }

                                  }

                              }




                              ws.get_Range(ws.Cells[1, 1] as Microsoft.Office.Interop.Excel.Range, ws.Cells[iRows + 1, iCols] as Microsoft.Office.Interop.Excel.Range).Value2 = dimArray;
                              ws.get_Range(ws.Cells[1, 1] as Microsoft.Office.Interop.Excel.Range, ws.Cells[1, iCols] as Microsoft.Office.Interop.Excel.Range).Font.Bold = true;
                              ws.get_Range(ws.Cells[1, 1] as Microsoft.Office.Interop.Excel.Range, ws.Cells[iRows + 1, iCols] as Microsoft.Office.Interop.Excel.Range).Font.Size = 10.0;
                              ws.get_Range(ws.Cells[1, 1] as Microsoft.Office.Interop.Excel.Range, ws.Cells[iRows + 1, iCols] as Microsoft.Office.Interop.Excel.Range).RowHeight = 14.25;
                              //ws.Columns[.ColumnWidth = datagridview.Columns[0].Width;  
                              for (int j = 0, k = 0; j < iTrueCols; j++)
                              {
                                  //省略Visible = false的列  
                                  if (dataGridView1.Columns[j].Visible)
                                  {
                                      ws.get_Range(ws.Cells[1, k + 1] as Microsoft.Office.Interop.Excel.Range, ws.Cells[1, k + 1] as Microsoft.Office.Interop.Excel.Range).ColumnWidth = (dataGridView1.Columns[j].Width / 8.4) > 255 ? 255 : (dataGridView1.Columns[j].Width / 8.4);
                                      //ws.Columns.c = datagridview.Columns[j].Width;  
                                      k++;
                                  }
                              }
                          }
                          app.Visible = true;


 

OpenXml: 

 

string myStream = saveFileDialog.FileName;

                         

                          CreateSpreadsheetWorkbook(myStream,dvtodt(dataGridView1));

string myStream = saveFileDialog.FileName;

 

                         

                          CreateSpreadsheetWorkbook(myStream,dvtodt(dataGridView1));

 

先将DataGridView转换为DataTable,在操作:

    public static void CreateSpreadsheetWorkbook(string filepath, DataTable dt)
              {
                

                  // Create a spreadsheet document by supplying the filepath.
                  // By default, AutoSave = true, Editable = true, and Type = xlsx.
                  FileInfo fileInfo = new FileInfo(filepath);
                  if (fileInfo.Exists)
                      fileInfo.Delete();

                  SpreadsheetDocument spreadsheetDocument = SpreadsheetDocument.Create(filepath, SpreadsheetDocumentType.Workbook);

                  // Add a WorkbookPart to the document.
                  WorkbookPart workbookPart = spreadsheetDocument.AddWorkbookPart();
                  workbookPart.Workbook = new Workbook();

                  // Add a WorksheetPart to the WorkbookPart.
                  WorksheetPart worksheetPart = workbookPart.AddNewPart<WorksheetPart>();
                  worksheetPart.Worksheet = new Worksheet(new SheetData());

                  // Add a workStylesPart to the workbookPart.
                  WorkbookStylesPart workStylesPart = workbookPart.AddNewPart<WorkbookStylesPart>();
                  workStylesPart.Stylesheet = new Stylesheet();

                  // Add a Stylesheet to the workStylesPart.
                  WorkbookStylesPart workbookStylesPart = spreadsheetDocument.WorkbookPart.WorkbookStylesPart;
                  Stylesheet styleSheet = workbookStylesPart.Stylesheet;

                  // Add Fonts and other some information.
                  Fonts fonts = new Fonts() { Count = (UInt32Value)2U, KnownFonts = true };

                  // Add based font to Fonts.
                  Font font = new Font();
                  FontSize fontSize = new FontSize() { Val = 11D };
                  Color color = new Color() { Theme = (UInt32Value)1U };
                  FontName fontName = new FontName() { Val = "Calibri" };
                  FontFamilyNumbering fontFamilyNumbering = new FontFamilyNumbering() { Val = 2 };
                  FontScheme fontScheme = new FontScheme() { Val = FontSchemeValues.Minor };
                  font.Append(fontSize);
                  font.Append(color);
                  font.Append(fontName);
                  font.Append(fontFamilyNumbering);
                  font.Append(fontScheme);

                  // Add fontSpecial to Fonts.
                  Font fontSpecial = new Font();
                  Bold bold = new Bold();
                  FontSize fontSizeSpecial = new FontSize() { Val = 11D };
                  Color colorSpecial = new Color() { Theme = (UInt32Value)1U };
                  FontName fontNameSpecial = new FontName() { Val = "Calibri" };
                  FontFamilyNumbering fontFamilyNumberingSpecial = new FontFamilyNumbering() { Val = 2 };
                  FontScheme fontSchemeSpecial = new FontScheme() { Val = FontSchemeValues.Minor };
                  fontSpecial.Append(bold);
                  fontSpecial.Append(fontSizeSpecial);
                  fontSpecial.Append(colorSpecial);
                  fontSpecial.Append(fontNameSpecial);
                  fontSpecial.Append(fontFamilyNumberingSpecial);
                  fontSpecial.Append(fontSchemeSpecial);

                  // Add font and fontSpecial to fonts collection.
                  fonts.Append(font);
                  fonts.Append(fontSpecial);

                  // Fills.When the object is serialized out as xml, its qualified name is x:fills.
                  Fills fills = new Fills() { Count = (UInt32Value)2U };
                  Fill fill = new Fill();

                  // Pattern.When the object is serialized out as xml, its qualified name is x:patternFill.
                  PatternFill patternFill = new PatternFill() { PatternType = PatternValues.None };
                  fill.Append(patternFill);

                  // This patternFillSpecial served for fillSpecial.
                  Fill fillSpecial = new Fill();
                  PatternFill patternFillSpecial = new PatternFill() { PatternType = PatternValues.Gray125 };
                  fillSpecial.Append(patternFillSpecial);

                  // Add fill and fillSpecial to fills collection.
                  fills.Append(fill);
                  fills.Append(fillSpecial);

                  // Borders.When the object is serialized out as xml, its qualified name is x:borders.
                  Borders borders = new Borders() { Count = (UInt32Value)1U };
                  Border border = new Border();

                  // Left Border.When the object is serialized out as xml, its qualified name is x:left.
                  LeftBorder leftBorder = new LeftBorder();

                  // Right Border.When the object is serialized out as xml, its qualified name is x:right.
                  RightBorder rightBorder = new RightBorder();

                  //Top Border.When the object is serialized out as xml, its qualified name is x:top.
                  TopBorder topBorder = new TopBorder();

                  // Bottom Border.When the object is serialized out as xml, its qualified name is x:bottom.
                  BottomBorder bottomBorder = new BottomBorder();

                  // This element specifies the color and line style for the diagonal border(s) of a cell,
                  // possibly including diagonally up and diagonally down.
                  DiagonalBorder diagonalBorder = new DiagonalBorder();

                  // Add leftBorder, rightBorder,topBorder,bottomBorder and diagonalBorder into border.
                  border.Append(leftBorder);
                  border.Append(rightBorder);
                  border.Append(topBorder);
                  border.Append(bottomBorder);
                  border.Append(diagonalBorder);
                  borders.Append(border);

                  // This is the critical object when the sample want to bold the cell format.
                  CellStyleFormats cellStyleFormats = new CellStyleFormats() { Count = (UInt32Value)1U };
                  CellFormat cellFormat = new CellFormat() { NumberFormatId = (UInt32Value)0U, FontId = (UInt32Value)0U, FillId = (UInt32Value)0U, BorderId = (UInt32Value)0U };

                  // Add cellFormat to cellStyleFormats
                  cellStyleFormats.Append(cellFormat);
                  CellFormats cellFormats = new CellFormats() { Count = (UInt32Value)2U };
                  CellFormat cellFormatSpecial = new CellFormat() { NumberFormatId = (UInt32Value)0U, FontId = (UInt32Value)0U, FillId = (UInt32Value)0U, BorderId = (UInt32Value)0U, FormatId = (UInt32Value)0U };
                  CellFormat cellFormatAnotherSpecial = new CellFormat() { NumberFormatId = (UInt32Value)0U, FontId = (UInt32Value)1U, FillId = (UInt32Value)0U, BorderId = (UInt32Value)0U, FormatId = (UInt32Value)0U, ApplyFont = true };
                  cellFormats.Append(cellFormatSpecial);
                  cellFormats.Append(cellFormatAnotherSpecial);
                  CellStyles cellStyles = new CellStyles() { Count = (UInt32Value)1U };
                  CellStyle cellStyle = new CellStyle() { Name = "Normal", FormatId = (UInt32Value)0U, BuiltinId = (UInt32Value)0U };
                  cellStyles.Append(cellStyle);
                  DifferentialFormats differentialFormats = new DifferentialFormats() { Count = (UInt32Value)0U };
                  TableStyles tableStyles = new TableStyles() { Count = (UInt32Value)0U, DefaultTableStyle = "TableStyleMedium2", DefaultPivotStyle = "PivotStyleLight16" };
                  StylesheetExtensionList stylesheetExtensionList = new StylesheetExtensionList();
                  StylesheetExtension stylesheetExtension = new StylesheetExtension() { Uri = "{EB79DEF2-80B8-43e5-95BD-54CBDDF9020C}" };
                  stylesheetExtension.AddNamespaceDeclaration("x14", "http://schemas.microsoft.com/office/spreadsheetml/2009/9/main");
                  stylesheetExtensionList.Append(stylesheetExtension);

                  // Add fonts,fills,borders,cellStyleFormats,cellFormats,cellStyles,differentialFormats,tableStyles and stylesheetEntensionList to styleSheet
                  styleSheet.Append(fonts);
                  styleSheet.Append(fills);
                  styleSheet.Append(borders);
                  styleSheet.Append(cellStyleFormats);
                  styleSheet.Append(cellFormats);
                  styleSheet.Append(cellStyles);
                  styleSheet.Append(differentialFormats);
                  styleSheet.Append(tableStyles);
                  styleSheet.Append(stylesheetExtensionList);

                  // Save the result.
                  styleSheet.Save();

                  // Add Sheets to the Workbook.
                  Sheets sheets = spreadsheetDocument.WorkbookPart.Workbook.AppendChild<Sheets>(new Sheets());

                  // Append a new worksheet and associate it with the workbook.
                  Sheet sheet = new Sheet() { Id = spreadsheetDocument.WorkbookPart.GetIdOfPart(worksheetPart), SheetId = 1, Name = "mySheet" };
                  sheets.Append(sheet);
                  string cl = "";
                  uint row = 2;
                  int index;
                  Cell cell;

                  // fill data into Excel file
                  foreach (DataRow dr in dt.Rows)
                  {
                      for (int idx = 0; idx < dt.Columns.Count; idx++)
                      {
                          if (idx >= 26)
                              cl = "A" + Convert.ToString(Convert.ToChar(65 + idx - 26));
                          else
                              cl = Convert.ToString(Convert.ToChar(65 + idx));

                          SharedStringTablePart shareStringPart;
                          if (spreadsheetDocument.WorkbookPart.GetPartsOfType<SharedStringTablePart>().Count() > 0)
                          {
                              shareStringPart = spreadsheetDocument.WorkbookPart.GetPartsOfType<SharedStringTablePart>().First();
                          }
                          else
                          {
                              shareStringPart = spreadsheetDocument.WorkbookPart.AddNewPart<SharedStringTablePart>();
                          }
                          if (row == 2)
                          {
                              index = InsertSharedStringItem(dt.Columns[idx].ColumnName, shareStringPart);
                              cell = InsertCellInWorksheet(cl, row - 1, worksheetPart);
                              cell.CellValue = new CellValue(index.ToString());
                              cell.DataType = new EnumValue<CellValues>(CellValues.SharedString);
                          }

                          // Insert the text into the SharedStringTablePart.
                          index = InsertSharedStringItem(dr[idx].ToString(), shareStringPart);
                          cell = InsertCellInWorksheet(cl, row, worksheetPart);
                          cell.CellValue = new CellValue(index.ToString());
                          cell.DataType = new EnumValue<CellValues>(CellValues.SharedString);
                      }

                      row++;
                  }

                  // Save the workbookPart.
                  workbookPart.Workbook.Save();

                  // Close the document.
                  spreadsheetDocument.Close();
              }
               

              /// <summary>
              /// Insert SharedStringItem object.
              /// </summary>
              private static int InsertSharedStringItem(string text, SharedStringTablePart shareStringPart)
              {

                  // If the part does not contain a SharedStringTable, create one.
                  if (shareStringPart.SharedStringTable == null)
                  {
                      shareStringPart.SharedStringTable = new SharedStringTable();
                  }
                  int i = 0;

                  // Iterate through all the items in the SharedStringTable. If the text already exists, return its index.
                  foreach (SharedStringItem item in shareStringPart.SharedStringTable.Elements<SharedStringItem>())
                  {
                      if (item.InnerText == text)
                      {
                          return i;
                      }
                      i++;
                  }

                  // The text does not exist in the part. Create the SharedStringItem and return its index.
                  shareStringPart.SharedStringTable.AppendChild(new SharedStringItem(new DocumentFormat.OpenXml.Spreadsheet.Text(text)));
                  shareStringPart.SharedStringTable.Save();
                  return i;
              }

              /// <summary>
              /// Insert cell in worksheet.
              /// </summary>
              private static Cell InsertCellInWorksheet(string columnName, uint rowIndex, WorksheetPart worksheetPart)
              {
                  Worksheet worksheet = worksheetPart.Worksheet;
                  SheetData sheetData = worksheet.GetFirstChild<SheetData>();
                  string cellReference = columnName + rowIndex;

                  // If the worksheet does not contain a row with the specified row index, insert one.
                  Row row;
                  if (sheetData.Elements<Row>().Where(r => r.RowIndex == rowIndex).Count() != 0)
                  {
                      row = sheetData.Elements<Row>().Where(r => r.RowIndex == rowIndex).First();
                  }
                  else
                  {
                      row = new Row() { RowIndex = rowIndex };
                      sheetData.Append(row);
                  }

                  // If there is not a cell with the specified column name, insert one. 
                  if (row.Elements<Cell>().Where(c => c.CellReference.Value == columnName + rowIndex).Count() > 0)
                  {
                      return row.Elements<Cell>().Where(c => c.CellReference.Value == cellReference).First();
                  }
                  else
                  {

                      // Cells must be in sequential order according to CellReference.
                      // Determine where to insert the new cell.
                      Cell refCell = null;
                      Cell newCell = new Cell() { CellReference = cellReference };
                      row.InsertBefore(newCell, refCell);
                      worksheet.Save();
                      return newCell;

                  }
              }


 

  • 2
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
DataGridView是.NET Framework中的一个控件,用于在Windows窗体应用程序中显示和编辑表格数据。而CSV(Comma-Separated Values)是一种常见的文件格式,用于存储表格数据,每行数据由逗号分隔。 DataGridView可以通过以下步骤导入CSV文件: 1. 创建一个DataTable对象,用于存储CSV文件中的数据。 2. 使用StreamReader读取CSV文件,将每行数据分割成数组,并将数组添加到DataTable中。 3. 将DataTable绑定到DataGridView上,以显示CSV文件中的数据。 DataGridView可以通过以下步骤导出CSV文件: 1. 创建一个StringBuilder对象,用于存储CSV文件中的数据。 2. 遍历DataGridView中的每行数据,将每行数据转换为逗号分隔的字符串,并将其添加到StringBuilder对象中。 3. 将StringBuilder对象中的数据写入到CSV文件中。 下面是一个简单的示例代码,演示如何使用DataGridView导入导出CSV文件: ``` // 导入CSV文件 private void ImportCSV(string filePath) { DataTable dt = new DataTable(); using (StreamReader sr = new StreamReader(filePath)) { string line; while ((line = sr.ReadLine()) != null) { string[] values = line.Split(','); if (dt.Columns.Count == 0) { foreach (string value in values) { dt.Columns.Add(value); } } else { dt.Rows.Add(values); } } } dataGridView1.DataSource = dt; } // 导出CSV文件 private void ExportCSV(string filePath) { StringBuilder sb = new StringBuilder(); foreach (DataGridViewRow row in dataGridView1.Rows) { if (!row.IsNewRow) { for (int i = 0; i < row.Cells.Count; i++) { sb.Append(row.Cells[i].Value.ToString()); if (i != row.Cells.Count - 1) { sb.Append(","); } } sb.AppendLine(); } } File.WriteAllText(filePath, sb.ToString()); } ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值