繁体   English   中英

如何将旧Excel文件中的多个工作表中的数据导出到新Excel文件中的一个工作表中

[英]How to export data from multiple sheets in old Excel file into one sheet in new Excel file

即时尝试导出包含多个工作表的excel文件,每个工作表都有一个数据(可能是50-70行)。

好在旧的excel文件中,它包含大约169张纸,所以当你乘以169和50时,它将在新的Excel文件中包含8450行

但是当我尝试执行代码时,结果将只包含500行。 这是我尝试的代码

private void button2_Click(object sender, EventArgs e)
{
FileInfo fileInfo = new FileInfo("C:\\Documents\\testFile.xlsm"); 
            string full = fileInfo.DirectoryName + "\\testResult.xlsx"; //Location for new Excel file that contain the result

            xlApp = new Excel.Application();
            xlWb = xlApp.Workbooks.Open("C:\\Documents\\testFile.xlsm");//Open the file
            xlWS = xlWb.Sheets[xlWb.Sheets.Count];//Count the sheets
            xlApp1 = new Excel.Application();
            xlWb1 = xlApp1.Workbooks.Add();
            int roww;//variable to save last number of row in the new excel file


            for (int i = 2; i <xlWb.Sheets.Count; i++) // looping
            {
                xlWb.Sheets[i].Activate();
                xlRange = xlWS.UsedRange;
                row = xlRange.Rows.Count;
                col = xlRange.Columns.Count;


                xlWS1 = (Excel.Worksheet)xlWb1.Worksheets.get_Item(1);
                xlRange1 = xlWS1.UsedRange;
                roww = xlRange1.Rows.Count;
                fulldata = new string[row][];
                //for transfer data to temp variable
                for (int j = 0; j < fulldata.Length; j++)
                {
                    fulldata[j] = new string[col];

                }
                for(int k = 0 ; k<row;k++)
                {
                    for (int l = 0; l < col; l++)
                    {
                        fulldata[k][l] = xlWS.Cells[k + 1, l + 1].value2.ToString();
                    }
                }
                //too export the data
                if (roww == 1) //if to count how many roww there is in the new file, if there is no data then it just put the data from the first row
                {
                    for (int k = 0; k <row; k++)
                    {
                        for (int l = 0; l < col; l++)
                        {
                            xlWS1.Cells[k + 1, l + 1] = fulldata[k][l];
                        }
                    }
                }
                else // if the file contain data from last sheet *means there will be more than 1 rows already fiiled
                {
                    for (int k = 0; k < row; k++)
                    {
                        for (int l = 0; l < col; l++)
                        {
                            xlWS1.Cells[roww + 1, l + 1] = fulldata[k][l];
                        }
                    }
                }
            }
            xlWb.Save();
            xlWb.Close();
            xlWb1.SaveAs(full, Excel.XlFileFormat.xlOpenXMLWorkbook, missing, missing,
            false, false, Excel.XlSaveAsAccessMode.xlNoChange, missing, missing, missing, missing, missing);
            xlWb1.Close();
            closeExcel(xlApp);
            closeExcel(xlApp1);
}

预期的结果是结果将有8450行,其中包含我想要导出的多个工作表的数据

实际结果只有500行,也许有人可以纠正我的代码,我不知道我在这里想念什么

在上面的代码中,在for循环中,在else块中(在新excel中的工作表已经有一些数据的情况下添加值)

你在设置:

xlWS1.Cells[roww + 1, l + 1] = fulldata[k][l];

在这里,您没有递增Cells属性的行值。 由于roww在执行for循环期间将包含相同的数据,因此您总是将数据写入同一行。

这应该是

xlWS1.Cells[roww + k + 1, l + 1] = fulldata[k][l];

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM