C# 如何使用c用(-)分隔列标题拆分数据填充空行

C# 如何使用c用(-)分隔列标题拆分数据填充空行,c#,sql,excel,C#,Sql,Excel,第一张照片是我在excel中的当前输出,第二张照片显示了我想要的内容 我遇到了问题,我在数据集中列标题名称下面插入了一个空行,我希望用拆分的列标题名称填充空行。像1-600、1-700、1-800一样,是分开的细胞 这里1是年,600周和所有的一样 这是我的密码: private void button4_Click(object sender, System.EventArgs e) { GetDataSet(); } private void Ge

第一张照片是我在excel中的当前输出,第二张照片显示了我想要的内容

我遇到了问题,我在数据集中列标题名称下面插入了一个空行,我希望用拆分的列标题名称填充空行。像1-600、1-700、1-800一样,是分开的细胞 这里1是年,600周和所有的一样

这是我的密码:

 private void button4_Click(object sender, System.EventArgs e)
    {
        GetDataSet();
    }
    private void GetDataSet()
    {
        try
        {
            SqlConnection conn = new SqlConnection(Connection);
            string data = null;
            //int i = 0;
            //int j = 0;

            Excel.Application xlApp;
            Excel.Workbook xlWorkBook;
            Excel.Worksheet xlWorkSheet;
            object misValue = System.Reflection.Missing.Value;

            xlApp = new Excel.Application();
            xlWorkBook = xlApp.Workbooks.Add(misValue);
            xlWorkSheet = (Excel.Worksheet)xlWorkBook.Worksheets.get_Item(1);
            SqlCommand cmd = new SqlCommand("select * from [CAT].[Tables].[LT1005ReportYAS]", conn);
            cmd.Parameters.AddWithValue("@TransactionID", "2603_LT023_13022019174458");
            cmd.Parameters.AddWithValue("@StartDate", "2019-01-01");
            cmd.Parameters.AddWithValue("@EndDate", "2019-01-21");
            cmd.Parameters.AddWithValue("@ClientID", 1030);
            SqlDataAdapter da = new SqlDataAdapter();
            cmd.CommandType = CommandType.Text;
            cmd.CommandTimeout = 0;
            da.SelectCommand = cmd;
            DataSet ds = new DataSet();

            conn.Open();
            da.Fill(ds);
            var dr = ds.Tables[0].NewRow();
            ds.Tables[0].Rows.InsertAt(dr, 0);
            ds.Tables[0].TableName = "Retailer";
            ds.Tables[0].Columns.RemoveAt(0);
            ds.Tables[0].Columns.RemoveAt(0);


            Microsoft.Office.Interop.Excel.Application objexcelapp = new Microsoft.Office.Interop.Excel.Application();
            objexcelapp.Application.Workbooks.Add(Type.Missing);
            objexcelapp.Columns.AutoFit();
            for (int i = 1; i < ds.Tables[0].Columns.Count + 1; i++)
            {
                Microsoft.Office.Interop.Excel.Range xlRange = (Microsoft.Office.Interop.Excel.Range)objexcelapp.Cells[1, i];
                xlRange.Font.Bold = -1;
                xlRange.Borders.LineStyle = Microsoft.Office.Interop.Excel.XlLineStyle.xlContinuous;
                xlRange.Borders.Weight = 1d;
                xlRange.HorizontalAlignment = Microsoft.Office.Interop.Excel.XlHAlign.xlHAlignCenter;
                objexcelapp.Cells[1, i] = ds.Tables[0].Columns[i - 1].ColumnName;
            }



            foreach (DataTable dt in ds.Tables)
            {
                for (int i1 = 0; i1 < dt.Columns.Count; i1++)
                {
                    xlWorkSheet.Cells[1, i1 + 1] = dt.Columns[i1].ColumnName;
                }
            }

            for (int i = 0; i <= ds.Tables[0].Rows.Count - 1; i++)
            {
                int s = i + 1;
                for (int j = 0; j <= ds.Tables[0].Columns.Count - 1; j++)
                {
                    data = ds.Tables[0].Rows[i].ItemArray[j].ToString();

                    xlWorkSheet.Cells[s + 1, j + 1] = data;
                    xlWorkSheet.Columns.AutoFit();
                    Microsoft.Office.Interop.Excel.Range xlRange = (Microsoft.Office.Interop.Excel.Range)xlWorkSheet.Cells[i + 2, j + 1];

                    xlRange.Borders.LineStyle = Microsoft.Office.Interop.Excel.XlLineStyle.xlContinuous;
                    //xlRange.Font.Bold = -1;
                    xlRange.Borders.Weight = 1d;

                    xlRange.HorizontalAlignment = Microsoft.Office.Interop.Excel.XlHAlign.xlHAlignLeft;

                }
            }



                xlWorkBook.SaveAs("Retailer.xls", Excel.XlFileFormat.xlWorkbookNormal, misValue, misValue, misValue, misValue, Excel.XlSaveAsAccessMode.xlExclusive, misValue, misValue, misValue, misValue, misValue);
        xlWorkBook.Close(true, misValue, misValue);
        xlApp.Quit();

        releaseObject(xlWorkSheet);
        releaseObject(xlWorkBook);
        releaseObject(xlApp);

        MessageBox.Show("Excel file created");

            conn.Close();
        }
        catch (Exception ex)
        {

        }
    }

您可以使用string.Split来执行要求的操作。例如:

字符串exampleValue=1-600; //这将在“-”连字符处拆分字符串,并生成一个包含2个值的数组。 string[]splitString=exampleValue.Split'-'; Console.WriteLinesplitString[0];//预期产出:1。 Console.WriteLinesplitString[1];//预期产出:600。
这有帮助吗?

非常感谢您回答我的问题,但我希望动态执行。@AamirAhmad动态基于什么?您的意思是希望以这种方式拆分每个列标题,还是希望根据某些条件更改标题的拆分方式?是的,亲爱的,我想知道如何根据某些条件拆分标题,因为您的string.split示例在我的codeCan中不起作用。请帮助我!!。。真的,我有麻烦了