Это абсолютно возможно. Вы получаете то, что я часто нахожу сложнее всего, получая информацию с другой платформы. Чтобы сделать эту работу, я бы немного выделил ее и для простоты использовал 2 листа (Лист1 с вашими известными данными и Лист2 для веб-данных).
Переберите свою таблицу из ~ 8000 предприятий. Мы можем определить это по количеству строк в UsedRange. Мы знаем, что ABN находится в столбце 2 (также известный как B), поэтому мы копируем его в переменную для передачи в функцию. Функция вернет «Тип сущности:» в столбец 3 (С) той же строки.
Sub LoopThroughBusinesses()
Dim i As Integer
Dim ABN As String
For i = 2 To Sheet1.UsedRange.Rows.Count
ABN = Sheet1.Cells(i, 2)
Sheet1.Cells(i, 3) = URL_Get_ABN_Query(ABN)
Next i
End Sub
Измените подпрограмму, которую вы создали, на функцию, чтобы она возвращала тип сущности, к которому вы стремитесь. Функция сохранит данные в Sheet2, а затем вернет только те данные Entity, которые нам нужны.
Function URL_Get_ABN_Query(strSearch As String) As String ' Change it from a Sub to a Function that returns the desired string
' strSearch = Range("a1") ' This is now passed as a parameter into the Function
Dim entityRange As Range
With Sheet2.QueryTables.Add( _
Connection:="URL;http://www.abr.business.gov.au/SearchByABN.aspx?SearchText=" & strSearch & "&safe=active", _
Destination:=Sheet2.Range("A1")) ' Change this destination to Sheet2
.BackgroundQuery = True
.TablesOnlyFromHTML = True
.Refresh BackgroundQuery:=False
.SaveData = True
End With
' Find the Range that has "Entity Type:"
Set entityRange = Sheet2.UsedRange.Find("Entity type:")
' Then return the value of the cell to its' right
URL_Get_ABN_Query = entityRange.Offset(0, 1).Value2
' Clear Sheet2 for the next run
Sheet2.UsedRange.Delete
End Function
От любого контроллера можно определить следующий метод.
def copy_template_database
template_name = "customerdb1" # Database to copy from
new_name = "temp" #database to create & copy to
#connect to template database to copy. Note that this will override any previous
#connections for all Models that inherit from ActiveRecord::Base
ActiveRecord::Base.establish_connection({:adapter => "mysql", :database => template_name, :host => "olddev",
:username => "root", :password => "password" })
sql_connection = ActiveRecord::Base.connection
sql_connection.execute("CREATE DATABASE #{new_name} CHARACTER SET latin1 COLLATE latin1_general_ci")
tables = sql_connection.select_all("Show Tables")
#the results are an array of hashes, ie:
# [{"table_from_customerdb1" => "customers"},{"table_from_customerdb1" => "employees},...]
table_names = Array.new
tables.each { |hash| hash.each_value { |name| table_names << name }}
table_names.each { |name|
sql_connection.execute("CREATE TABLE #{new_name}.#{name} LIKE #{template_name}.#{name}")
sql_connection.execute("INSERT INTO #{new_name}.#{name} SELECT * FROM #{template_name}.#{name}")
}
#This statement is optional. It connects ActiveRecord to the new database
ActiveRecord::Base.establish_connection({:adapter => "mysql", :database => new_name, :host => "olddev",
:username => "root", :password => "password" })
end
Обратите внимание, что я не знаю наверняка, если это сохранит внешнюю ключевую целостность. Я думаю, что это во многом зависит от того, как шаблон Database создается.
Я не уверен, что Вы имеете в виду, но можно использовать функциональность командной строки рубина, чтобы вывести шаблонную базу данных, создать новую базу данных и повторно импортировать ее с помощью mysqldump программы:
> mysqldump -uroot -proot templateDB > dump.sql
> mysql -uroot -proot --execute="CREATE DATABASE newDB"
> mysql -uroot -proot newDB < dump.sql
Вот хорошее описание вызова параметров командной строки от Ruby.
Вы могли поместить свой шаблонный код создания схемы в сценарий, который содержит все необходимые операторы создания таблицы/индекса/представления/процедуры, назовите его "template_schema.sql" или безотносительно и затем просто запустите скрипт на базе данных по Вашему выбору (от Ruby, если это - то, что Вы, после) и Вы сделаны.
Лучший подход должен, вероятно, иметь каждый объект базы данных в отдельном файле при управлении исходным кодом (чтобы помочь отследить изменения на отдельных объектах) и затем объединить их в единственный файл как часть развертывания.
Используя yaml_db
Вам необходимо установить плагин, выгрузить любую базу данных rails (включая mysql) в файл data.yml с помощью задачи rake, изменить строку подключения, чтобы она указывала на новую базу данных а затем, наконец, загрузите data.yml в любую новую базу данных (включая mysql), используя другую задачу rake. Очень просто.