Настройка скрипта Python для добавления данных в таблицу ExcelIOS

Программируем под IOS
Ответить
Anonymous
 Настройка скрипта Python для добавления данных в таблицу Excel

Сообщение Anonymous »

Я новичок в Python и бьюсь головой о стену, пытаясь решить свою проблему.
У меня есть таблица в файле Excel, который я храню. iCloud Drive для отслеживания расходов, и мне нужно использовать этот файл как в iOS, так и в MacOS.

До сих пор я использовал комбинацию ярлыка Apple, базового файла CSV и VBA для быстро ввести данные о расходах в Ярлыки, передать их в CSV, а затем периодически автоматически добавляю эти данные в файл Excel. (Это добавление в Excel происходит только тогда, когда я открываю файл на своем Mac, поскольку iOS Excel не поддерживает макросы.)
Теперь я хотел бы пропустить маршрут CSV и VBA и сделать это строго с помощью ярлыков и сценария Python, чтобы я мог обновлять файл Excel даже из iOS.

Я использую приложение A-Shell, чтобы облегчить выполнение сценария Python.
Я чувствую, что уже на 90 % добрался до финиша. line.

Однако, несмотря на различные изменения в моем скрипте (любезно предоставленные ChatGPT), я не могу придумать успешный скрипт
  • Расширяет форматирование и формулы таблицы [которые обычно представляют собой структурированные ссылки] на вновь добавленную строку; и
  • Не повреждает файл Excel при этом.
Вот последняя версия моего сценария:< /p>
from openpyxl import load_workbook
from openpyxl.utils import get_column_letter
import sys

# Get input data from command-line arguments
input_data = sys.argv[1:] # Example: ["Value1", "Value2", "Value3"]

# Ensure there are exactly three inputs
if len(input_data) != 3:
print("Error: Please provide exactly three input values.")
sys.exit(1)

# Define the full path to your Excel file
excel_file = "/path_to_my_file/dummy.xlsx"

try:
# Load the workbook and worksheet
wb = load_workbook(excel_file)
ws = wb['Expenses']

# Identify the table range
table_name = 'tbl_expenses'
if table_name not in ws.tables:
print(f"Table '{table_name}' not found in worksheet.")
sys.exit(1)

table = ws.tables[table_name]
start_cell, end_cell = table.ref.split(':')
start_row = ws[start_cell].row
end_row = ws[end_cell].row
end_col = ws[end_cell].column

# Determine the next row index
new_row_idx = end_row + 1

# Insert data starting from the second column (Column B)
for col_index, value in enumerate(input_data, start=2): # Start at column B
ws.cell(row=new_row_idx, column=col_index, value=value)

# Extend structured reference formulas for remaining columns
for col in range(1, end_col + 1):
source_cell = ws.cell(row=end_row, column=col)
target_cell = ws.cell(row=new_row_idx, column=col)
if source_cell.data_type == 'f': # If it's a formula
target_cell.value = source_cell.value

# Update the table's range manually
from openpyxl.utils import get_column_letter
new_end_cell = f"{get_column_letter(end_col)}{new_row_idx}"
table.ref = f"{start_cell}:{new_end_cell}"

# Save the workbook
wb.save(excel_file)
print("Row added successfully with extended structured reference formulas.")
except Exception as e:
print(f"An unexpected error occurred: {e}")

Заранее спасибо за помощь!
ОБНОВЛЕНИЕ: Чтобы прояснить проблему форматирования, я попробовал несколько подходов к расширению шрифтов и границ. , заливка, другое форматирование старой последней строки во вновь добавленную строку. Хотя кое-что из этого сработало, мне не удалось присвоить свойствам «new_cell.Fill» либо (1) свойства Fill старой ячейки (например, start_color, end_color); (2) PatternFill старых ячеек с использованием объекта Color и RGB; или (3) другие варианты этого.
Что касается формул в столбцах A и E:G, которые я хочу распространить на новую строку, все они в настоящее время основаны на структурированных ссылках и один из них вызывает имя пользовательской функции на основе LAMBDA. Самый простой столбец на основе формулы выглядит следующим образом:
=IF([@[My Net]]"",INDEX([Cum Bal],ROW()-2)+[@[My Net]],"")


Подробнее здесь: https://stackoverflow.com/questions/793 ... xcel-table
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «IOS»