Как разделить файл Excel на основе определенной колонки - PullRequest
0 голосов
/ 17 июня 2019

У меня есть пример данных, как это (в Excel)

Название Место JKT Б JKT C CGK D JKT E CGK F BBK G JKT H BBK Я BBK J BBK K CGK L CGK

Мне дали 3 ++ файла, которые содержат данные, подобные примеру, и шаг в том, что я должен сначала объединить файлы в 1 файл Excel, а затем вывод, который я уже объединю, должен быть разделен на множество файлов Excel. на месте.

Пример: в этих данных 3 разных места, поэтому он создаст 3 разных файла для JKT, CGK и BBK

Код, который я пытался объединить

xlApp = new excel.Application();
 xlWb = xlApp.Workbooks.Open(fileName);
 xlWs = xlWb.Sheets[1];
 xlRange = xlWs.UsedRange;

 row = xlRange.Rows.Count;
 col = xlRange.Columns.Count;
 fulldata = new string[row][];

 for (int i = 0; i < fulldata.Length; i++)
 {
    fulldata[i] = new string[col];
    //MessageBox.Show(i.ToString());
 }

 for (int i = 0; i < row; i++)
 {
     for (int j = 0; j < col; j++)
     {
         try
         {
            fulldata[i][j] = xlWs.Cells[i + 1, j + 1].value2.ToString();
         }
         catch (Exception ee)
         {
             fulldata[i][j] = "";
         }
      }
 }

//create new excel file for combined data

xlApp1 = new excel.Application();
xlWb1 = xlApp1.Workbooks.Add();
xlWs1 = (excel.Worksheet)xlWb1.Worksheets.get_Item(1);
xlRange1 = xlWs1.UsedRange;

newFileRow = xlRange1.Rows.Count;
newFileCol = xlRange1.Columns.Count;

//Combine
if (newFileRow == 1)
{
   for (int i = 0; i < row; i++)
   {
       for (int j = 0; j < col; j++)
       {
           xlWs1.Cells[i + 1, j + 1] = fulldata[i][j];
       }
   }
}
else
{
   for (int i = newFileRow+1; i < row + newFileRow; i++)
   {
       for (int j = 0; j < col; j++)
       {
           xlWs1.Cells[i, j + 1] = fulldata[count][j];
           count++;
        }
     }
}

//Split ExcelFile
for (int i = 0; i < row; i++)
   {
       for (int j = 0; j < col; j++)
       {
           //insertcode here
       }
   }

Проблема в том, что данные имеют более 40 мест, поэтому я не знаю эффективного способа их разделения, потому что, если я использую режим жесткого кода, он будет неэффективным и трудным для чтения.

Hardcode = определяет переменную для 40 различных мест, определяет excel.Application для 40 различных типов и использует if для 40 ++ различных мест

Ожидаемый результат (из примера): 1-е превосходство: JKT.xlsx

Name       Place
A          JKT
B          JKT
D          JKT

2-й Excel: CGK.xlsx

Name       Place
C          CGK
E          CGK
K          CGK 

3-й Excel: BBK.xlsx

Name       Place
F          BBK

Любая помощь будет оценена и грамматическая коррекция

1 Ответ

0 голосов
/ 17 июня 2019

Почему вы не используете запрос? После прочтения файла поместите оператор ORDER BY.

SqlCommand cmd = "SELECT NAME, PLACE FROM namaTabel ORDER BY PLACE ASC"; 
cmd.fulldata();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...