Этот код занял около двух секунд, чтобы запустить 150000 записей с примерно 3000, равными США.
Вам нужно будет изменить его в соответствии с вашими настройками. например: названия различных рабочих листов; диапазоны ячеек, если ваши таблицы не начинаются с A1
, немного другой синтаксис, если ваши данные в Excel Tables
, а не просто диапазоны и т. д.
Используется встроенный автофильтр Excel [ 1111]
В листе назначения есть все строки, кроме тех, которые имеют США.
Option Explicit
Sub noUS()
Dim wsSrc As Worksheet, wsDest As Worksheet
Dim rSrc As Range, rDest As Range
Const filterColumn As Long = 4 'Change to 12 for column L
Dim LRC() As Long
Set wsSrc = Worksheets("sheet1")
Set wsDest = Worksheets("sheet2")
Set rDest = wsDest.Cells(1, 1)
wsDest.Cells.Clear
With wsSrc
'get last row and column of the source worksheet
LRC = LastRowCol(.Name)
'set the range
Set rSrc = .Range(.Cells(1, 1), .Cells(LRC(0), LRC(1)))
'set the filter
'first turn it off
.AutoFilterMode = False
'now set it for the range
rSrc.AutoFilter _
field:=filterColumn, _
Criteria1:="<>US", _
visibledropdown:=False
End With
Set rSrc = rSrc.SpecialCells(xlCellTypeVisible)
rSrc.Copy rDest
'turn off the autofilter
wsSrc.AutoFilterMode = False
End Sub
'--------------------------------------------
Private Function LastRowCol(Worksht As String) As Long()
Application.Volatile
Dim WS As Worksheet, R As Range
Dim LastRow As Long, LastCol As Long
Dim L(1) As Long
Set WS = Worksheets(Worksht)
With WS
Set R = .Cells.Find(what:="*", after:=.Cells(1, 1), _
LookIn:=xlValues, searchorder:=xlByRows, _
searchdirection:=xlPrevious)
If Not R Is Nothing Then
LastRow = R.Row
LastCol = .Cells.Find(what:="*", after:=.Cells(1, 1), _
LookIn:=xlValues, searchorder:=xlByColumns, _
searchdirection:=xlPrevious).Column
Else
LastRow = 1
LastCol = 1
End If
End With
L(0) = LastRow
L(1) = LastCol
LastRowCol = L
End Function
И если вы хотите иметь отдельный лист с US строками, вы можете вставить следующее до конца Sub
:
'now get the US rows
With wsSrc
Set rSrc = .Range(.Cells(1, 1), .Cells(LRC(0), LRC(1)))
.AutoFilterMode = False
rSrc.AutoFilter _
field:=filterColumn, _
Criteria1:="US", _
visibledropdown:=False
Set rSrc = rSrc.SpecialCells(xlCellTypeVisible)
rSrc.Copy rUS
.AutoFilterMode = False
End With
I предпочитаю сохранять исходные данные, а не удалять материал из источника. Но, если хотите, после того, как вы сделали вышеупомянутое, и вы довольны результатом, просто удалите wsSrc
Приведенный выше код был изменен, так что вы получите, что я думаю, что вы хотите, это рабочие листы («Штат»), содержащие все неамериканские товары; и рабочие листы («Из TaxWise»), содержащие все предметы из США.
Вместо того, чтобы удалять несмежные строки, очень медленный процесс, мы фильтруем строки, которые мы хотим, к новому рабочему листу; удалите исходный лист и переименуйте новый лист.
Не пытайтесь делать это дома без резервного копирования ваших исходных данных.
<час>Option Explicit
Sub noUS()
Dim wsSrc As Worksheet, wsDest As Worksheet, wsUS As Worksheet
Dim rSrc As Range, rDest As Range, rUS As Range
Const filterColumn As Long = 12
Dim LRC() As Long
Set wsSrc = Worksheets("From TaxWise")
Set wsDest = Worksheets("State")
Set rDest = wsDest.Cells(1, 1)
wsDest.Cells.Clear
With wsSrc
'get last row and column of the source worksheet
LRC = LastRowCol(.Name)
'set the range
Set rSrc = .Range(.Cells(1, 1), .Cells(LRC(0), LRC(1)))
'set the filter
'first turn it off
.AutoFilterMode = False
'now set it for the range
rSrc.AutoFilter _
field:=filterColumn, _
Criteria1:="<>US", _
visibledropdown:=False
End With
Set rSrc = rSrc.SpecialCells(xlCellTypeVisible)
rSrc.Copy rDest
'turn off the autofilter
wsSrc.AutoFilterMode = False
'now get the US rows, may need to add worksheet
On Error Resume Next
Set wsUS = Worksheets("US")
If Err.Number = 9 Then
Worksheets.Add
ActiveSheet.Name = "US"
End If
Set wsUS = Worksheets("US")
Set rUS = wsUS.Cells(1, 1)
With wsSrc
Set rSrc = .Range(.Cells(1, 1), .Cells(LRC(0), LRC(1)))
.AutoFilterMode = False
rSrc.AutoFilter _
field:=filterColumn, _
Criteria1:="US", _
visibledropdown:=False
Set rSrc = rSrc.SpecialCells(xlCellTypeVisible)
rSrc.Copy rUS
.AutoFilterMode = False
End With
'Delete Taxwise and rename US sheets
Application.DisplayAlerts = False
wsSrc.Delete
wsUS.Name = "From TaxWise"
Application.DisplayAlerts = True
End Sub
'--------------------------------------------
Private Function LastRowCol(Worksht As String) As Long()
Application.Volatile
Dim WS As Worksheet, R As Range
Dim LastRow As Long, LastCol As Long
Dim L(1) As Long
Set WS = Worksheets(Worksht)
With WS
Set R = .Cells.Find(what:="*", after:=.Cells(1, 1), _
LookIn:=xlValues, searchorder:=xlByRows, _
searchdirection:=xlPrevious)
If Not R Is Nothing Then
LastRow = R.Row
LastCol = .Cells.Find(what:="*", after:=.Cells(1, 1), _
LookIn:=xlValues, searchorder:=xlByColumns, _
searchdirection:=xlPrevious).Column
Else
LastRow = 1
LastCol = 1
End If
End With
L(0) = LastRow
L(1) = LastCol
LastRowCol = L
End Function
Я думаю, что у Django есть часть лучшей документации любого проекта, я продолжил работать. Это - причина, мы предпочли ее Turbogears два года назад, и это был лучший технологический выбор, который мы сделали.
Это чрезвычайно просто, и Python'y. Основное привет мировое веб-приложение..
import web
urls = (
'/(.*)', 'hello'
)
class hello:
def GET(self, name):
i = web.input(times=1)
if not name: name = 'world'
for c in range(int(i.times)):
print 'Hello,', name+'!'
if __name__ == "__main__": web.run(urls, globals())
именно.
Я нашел, что Django вызвал много конвенций самих по себе и размещения кода, и я никогда не мог помнить импорт промежуточного программного обеспечения/ярлыков и все другие "волшебство", которое в значительной степени требуется, чтобы писать что-либо. Я нашел, что это было ближе к Ruby on Rails, чем веб-платформа Python.
С web.py можно записать все, функционирующее веб-приложение, не используя ни одного из модулей помощника web.py - единственная вещь, которую необходимо сделать, import web
и установите URL, который довольно неизбежен. (последняя строка в примере выполняет веб-сервер разработки),
Это имеет много материала в нем, как база данных API, помощники формы, механизм шаблонной обработки и так далее, но это не вынуждает их на Вас - Вы могли сделать весь свой вывод HTML print "Using <b>%s</b>" % (" string formating ".strip())
если Вы желали!
О, в то время как я подчеркнул, что простота, web.py - то, в чем записан http://reddit.com, таким образом, это также доказано очень способным/надежным. Кроме того, это сообщение web.py автора является очень хорошим объяснением того, почему я очень предпочитаю web.py по Django
DanJ, вот довольно хороший список всех известных платформ Python: http://wiki.python.org/moin/WebFrameworks
Я рекомендовал бы смотреть на статьи Википедии для Django, Turbogears, Опор, и т.д. [Я написал статью о web.py однажды, но это было удалено :-(] Они объясняют философские и различия компонента между платформами вполне прилично.
Лично, мне нравится TurboGears много, так как он основан на известных компонентах, CherryPy (для веб-обслуживания и маршрутизации URL), Kid (для шаблонов), и SQLObject (для объектно-реляционного отображения). Мне нравится этот, они сопротивлялись убеждению к "самокрутке" для всех компонентов, и я чувствую, что результатом является очень Pythonic и легкий начать с.
Но необходимо посмотреть на некоторые примеры кода и учебные руководства, и решить то, что подходит Вам лучше всего.
Необходимо также смотреть на web2py, который имеет хорошие документы и является очень хорошей платформой для создания wep приложения.
Django удивительно хорош. Guido использует его (работающий в Google). Это - главная причина, почему я работаю больше в Python, чем в Lua.
Вы могли бы хотеть посмотреть на Karrigell. Это имеет несколько опций для программирования синтаксиса, например, чистого Python, чистый HTML w/сценарии Python, комбинация, и т.д. Я не знаю, как хорошо это масштабируется, потому что я не использовал его в течение нескольких лет, но это хорошо для получения Ваших ног влажные w/веб-платформы.
Повторяя ответ немногих, я предлагаю Django. по некоторым простым причинам:
Я предполагаю, что Вы говорите о веб-платформе. Я использовал CherryPy и нашел это довольно полезным. Попытайтесь использовать каждого, чтобы кодировать простое решение и видеть, сколько оно выравнивает с Вашим стилем программирования.
Я записал веб-приложения с сырыми данными wsgi. Возможно, развертывая мою собственную библиотеку в какой-то момент. Я не делаю точно так же, как приблизительно большие платформы и такой. Я учился ненавидеть http при записи в сырых данных wsgi. Вам действительно не нравится он после понимания, сколько глупого парсинга и интерпретации необходимо загрузить файл.
Из-за wsgi Python имеет тонны платформ различных качеств. Если бы Вы хотите попробовать мой путь, я предположил бы, что требуется знать werkzeug, возможно. Это обеспечивает некоторые вещи, когда Вы еще не знаете, как сделать их. Это только имеет, возможно, слишком много 'платформы' для меня. В конце очень хорошо записанная платформа должна превысить то, что я записал в wsgi все же.
Wekrzeug также заслуживает упоминания. Это не полноценный веб-фреймворк. Это структура WSGI низкого уровня. ( 30-минутный экранный ролик вики )