Bhola Ram Sahu Ответов: 2

Разбить один лист excel на несколько листов на основе значения столбца


Может быть, это повторится, но я нигде не получу решения.

Я хочу разбить файл excel на несколько листов или несколько файлов.
У меня есть некоторый код на VBA, но он мне строго нужен в оконном приложении c#. Я не могу преобразовать код VBA в c#.

У меня есть файл типа:

Название Месяц Зарплата
[А] января 50к
[B] январь 55k
[А] 45к февраля
[B] февраль 60K

Я хочу создать отдельный лист для каждого имени, например:


Название Месяц Зарплата
[А] января 50к
[А] 45к февраля

И

Название Месяц Зарплата
[B] январь 55k
[B] февраль 60K

Мне нужны два отдельных файла. Один для имени [A] , а другой для имени [B], имеющие свои соответствующие строки только в каждом файле.

Что я уже пробовал:

Код, с которым я работаю в VBA. Но некоторые классы отличаются в C#. Поэтому я не могу реализовать его на языке Си#

Option Explicit
Sub SplitIntoSeperateFiles()

Dim OutBook As Workbook
Dim DataSheet As Worksheet, OutSheet As Worksheet
Dim FilterRange As Range
Dim UniqueNames As New Collection
Dim LastRow As Long, LastCol As Long, _
    NameCol As Long, Index As Long
Dim OutName As String

'set references and variables up-front for ease-of-use
Set DataSheet = ThisWorkbook.Worksheets("Sheet1")
NameCol = 1
LastRow = DataSheet.Cells.Find("*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
LastCol = DataSheet.Cells.Find("*", SearchOrder:=xlByColumns, SearchDirection:=xlPrevious).Column
Set FilterRange = Range(DataSheet.Cells(1, NameCol), DataSheet.Cells(LastRow, LastCol))

'loop through the name column and store unique names in a collection
For Index = 2 To LastRow
    On Error Resume Next
        UniqueNames.Add Item:=DataSheet.Cells(Index, NameCol), Key:=DataSheet.Cells(Index, NameCol)
    On Error GoTo 0
Next Index

'iterate through the unique names collection, writing 
'to new workbooks and saving as the group name .xls
Application.DisplayAlerts = False
For Index = 1 To UniqueNames.Count
    Set OutBook = Workbooks.Add
    Set OutSheet = OutBook.Sheets(1)
    With FilterRange
        .AutoFilter Field:=NameCol, Criteria1:=UniqueNames(Index)
        .SpecialCells(xlCellTypeVisible).Copy OutSheet.Range("A1")
    End With
    OutName = ThisWorkbook.FullName
    OutName = Left(OutName, InStrRev(OutName, "\"))
    OutName = OutName & UniqueNames(Index)
    OutBook.SaveAs Filename:=OutName, FileFormat:=xlExcel8
    OutBook.Close SaveChanges:=False
    Call ClearAllFilters(DataSheet)
Next Index
Application.DisplayAlerts = True

End Sub

'safely clear all the filters on data sheet
Sub ClearAllFilters(TargetSheet As Worksheet)
    With TargetSheet
        TargetSheet.AutoFilterMode = False
        If .FilterMode Then
            .ShowAllData
        End If
    End With
End Sub

[no name]

И что же? Неужели вы думаете, что мы будем кодировать это для вас, основываясь на расплывчатом описании и неизвестных бизнес-правилах? Этого не случится.

Bhola Ram Sahu

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

Есть еще хорошие люди, которые могут предложить мне любую ссылку.

[no name]

Ну, раз вы не потрудились задать вопрос или описать реальную проблему, почему вы тратите наше время впустую?

Я бы предложил www.google.com.

Bhola Ram Sahu

http://stackoverflow.com/questions/23106555/split-file-into-multiple-files-in-excel

[no name]

И так что же этот не-законный-вопрос на SO имеет отношение к вашему не-законному-вопросу?

ZurdoDev

Никто не напишет весь код за вас, так что у вас есть конкретный вопрос?

Bhola Ram Sahu

Там может быть какая-то ссылка или форум, о которых я не знаю. Любой может предложить мне это. Спасибо за ваш ответ.

ZurdoDev

Я не знаком ни с какими форумами, которые сделают всю работу за вас. Извиняюсь.

Bhola Ram Sahu

http://stackoverflow.com/questions/23106555/split-file-into-multiple-files-in-excel

2 Ответов

Рейтинг:
2

Patrice T

Даже при всем желании невозможно дать вам желаемый ответ.

Цитата:
Я хочу разбить файл excel на несколько листов или несколько файлов.

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

На данный момент лучшее объяснение, которое вы можете сделать, - это опубликовать исходный код, который у вас есть в VBA.
Цитата:
Я совершенно слеп в отношении логики

Логика C# будет точно такой же, как и VBA.
поскольку вы не понимаете логики, я подозреваю, что вы не программист.
Программисты тратят ужасно много времени на изучение всех необходимых техник и приобретение необходимых знаний. Вот почему такие люди, как вы, у которых нет времени или нет желания учиться программированию, платят им за эту работу.

Ваш вопрос вписывается в категорию "выполняю свою работу/домашнее задание бесплатно", поэтому вам будет очень трудно найти кого-то для этого бесплатно.
Мой лучший совет: наймите программиста.


Рейтинг:
1

Member 11963532

Вы могли бы сделать что-то подобное в CopyData. Отправить именем, чтобы CopyData пустоту CopyData(строка strFile). Потом после дальности.Скопируйте и добавьте следующие строки.


Excel.Range range_name = sheetDest.get_Range(string.Format("E{0}", _currentRowCount), string.Format("E{0}", _currentRowCount + sheetRowCount));
range_name.Value = strFile;