Retrieving the evaluation result of an Initialization Cell in a notebook `nb1` from another notebook `nb2`
I have a very long code in a notebook nb1
in which all the initialization cells are tagged. I have another notebook nb2
where I want to evaluate the initialization cells in nb1
and get the results in nb2
by using CellTags
.
I tried the following code, which does something but I cannot see the results in nb2
.
myButton[tag_] :=
Button["Evaluate " <> tag,
NotebookEvaluate[
"C:\\Users\\ttemel\\Desktop\\World_Bank_projects\\WB_Contract_2\\\
Extension_to_1st_contract_27oct19\\IOdatabase_oecd\\database_IOtables_\
SA_NO_UK_2000_2015_run_1.m", EvaluationElements -> {"Tags" -> {tag}}],
Method -> "Queued"];
Grid[{Map[myButton, {"SectorIOMarketChains", "DensityPlot"}]}]
CellPrint[
ExpressionCell[Defer[Print["SectorIOMarketChains"]], "Input",
CellTags -> {"SectorIOMarketChains"}, ShowCellTags -> True]]
CellPrint[
ExpressionCell[Defer[Print["DensityPlot"]], "Input",
CellTags -> {"DensityPlot"}, ShowCellTags -> True]]
Why does not this code give me the results in nb2
?
Answer
Your file "database_IOtables _SA _NO _UK _ 2000_ 2015_run _ 1.m"
isn't a Notebook, but a Package - right? Hence the EvaluationElements
option is simply ignored, because Packages has no Cell
s and associated CellTag
s.
Obviously, you are trying to adapt the code from the section Examples ► Applications
on the Documentation page for NotebookEvaluate
.
Here is how it is supposed to work:
Create a Notebook with your cells:
nb = CreateDocument[{
ExpressionCell[Defer[Print["SectorIOMarketChains"]], "Input",
CellTags -> {"SectorIOMarketChains"}, ShowCellTags -> True],
ExpressionCell[Defer[Print["DensityPlot"]], "Input", CellTags -> {"DensityPlot"},
ShowCellTags -> True]
}];In current Notebook create
Button
s for evaluating tagged cells from that Notebook:myButton[nb_, tag_] :=
Button["Evaluate " <> tag,
NotebookEvaluate[nb, EvaluationElements -> {"Tags" -> {tag}}], Method -> "Queued"];
Grid[{Map[myButton[nb, #] &, {"SectorIOMarketChains", "DensityPlot"}]}]Sequentially press the buttons, the results will appear in current Notebook:
When working with an existing Notebook, on the first step you should use NotebookOpen
(possibly with the option Visible -> False
if you don't want it to be displayed):
nb = NotebookOpen[filePath, Visible -> False];
Do not forget to close the invisible Notebook when it is no longer needed:
NotebookClose[nb]
You can get the list of currently opened Notebooks (including invisible) via Notebooks
:
Notebooks[]
Note that NotebookEvaluate
is a relatively old function, introduced when CellObject
wasn't available. Similar (but not exactly the same) effect can be achieved with Cells
and ToExpression
:
ToExpression[NotebookRead[Cells[nb, CellTags -> {"SectorIOMarketChains"}]][[1, 1]]]
SectorIOMarketChains
You can see what ToExpression
returns using its three-argument form:
ToExpression[
NotebookRead[Cells[nb, CellTags -> {"SectorIOMarketChains"}]][[1, 1]], StandardForm, Hold]
Hold[Print["SectorIOMarketChains"]]
Comments
Post a Comment