வாடிக்கையாளர் வழங்கிய எக்செல் நேரடியாக மீண்டும் சேமிக்க வேண்டாம்: முதலில் வெளிப்புற இணைப்புகளைச் சரிபார்க்கவும்
Keep_vba=உண்மை என்பது ஒரு தக்கவைப்புக் கொள்கை, "மேக்ரோ கண்டறியப்பட்டது" என்பதற்கான ஆதாரம் அல்ல. பின்வருபவை ZIP தொகுப்பு vbaProject.bin மற்றும் வெளிப்புற இணைப்பு கூறுகள் உள்ளதா என்பதை மட்டுமே சரிபார்க்கிறது; கூறுகளின் இருப்பு உள்ளடக்கம் பாதுகாப்பானது, மேக்ரோக்கள் செல்லுபடியாகும் அல்லது வெளிப்புற இலக்குகள் அணுகக்கூடியவை என்று அர்த்தமல்ல. மேக்ரோக்கள் செயல்படுத்தப்படாது அல்லது இணைப்புகளைப் பார்வையிடாது.
வாடிக்கையாளர் அனுப்பிய எக்செல் பொதுவாக உள்நாட்டில் திறக்கப்படும், ஆனால் பைதான் ஸ்கிரிப்ட் மூலம் செயலாக்கப்பட்ட பிறகு அல்லது கணினியில் பதிவேற்றப்பட்ட பிறகு, சூத்திரம் #REF! ஆக மாறலாம், கீழ்தோன்றும் மெனு மறைந்துவிடும் அல்லது திறக்க முடியாது. இது வழக்கமாக கோப்பின் சிதைவு அல்ல, மாறாக மீண்டும் சேமிக்கும் போது வெளிப்புற இணைப்பு கேச் அல்லது VBA மேக்ரோக்களை அப்படியே பாதுகாக்காத தானியங்கு கருவியாகும்.
எக்செல் தொகுப்பைச் செயலாக்க ஸ்கிரிப்ட்களைப் பயன்படுத்த வேண்டிய டெவலப்பர்கள் மற்றும் ஆபரேட்டர்களுக்காக இந்தக் கட்டுரை எழுதப்பட்டுள்ளது. Openpyxl ஐ இயல்புநிலை ஏற்றினால் என்ன தகவல் இழக்கப்படும் என்பதை பின்வருபவை விளக்குகின்றன, செயற்கை மாதிரி ஆய்வு யோசனையை வழங்குகின்றன மற்றும் ஏற்றுக்கொள்ளும் போது கைமுறையாக மதிப்பாய்வு தேவைப்படும் எல்லைகளை பட்டியலிடுகிறது. இதைப் படித்த பிறகு, ஒரு ஆவணம் சேமிக்கப்படுவதற்கு முன்பு எதைச் சரிபார்க்க வேண்டும் என்பதை நீங்கள் தீர்மானிக்க முடியும்.
ஒரு வாக்கியத்தில் முடிவு: Excel ஐ சேமிப்பதற்கு முன் வெளிப்புற இணைப்புகள் மற்றும் VBA கூறுகளின் பட்டியலை எடுத்துக் கொள்ளுங்கள்
கோப்பு தொகுப்பில் VBA திட்டங்கள் மற்றும் வெளிப்புற இணைப்பு கூறுகள் உள்ளதா என்பதை முதலில் உறுதிப்படுத்தவும், பின்னர் ஏற்றுதல் அளவுருக்களை முடிவு செய்து, ஏற்றுக்கொள்ளும் போது கைமுறை மதிப்பாய்வு செயல்முறையைத் தக்கவைக்கவும்.
| உங்கள் நிலைமை | பரிந்துரைக்கப்பட்ட நடைமுறைகள் | காரணம் |
|---|---|---|
| கோப்பு தொகுப்பு vbaProject.bin இல் உள்ளது | தனித்தனியாக மதிப்பாய்வு செய்யப்பட வேண்டிய உள்ளடக்கம் அதில் உள்ளதாகத் தெரிவிக்கவும், மேலும் மேக்ரோ செயல்படுத்தப்படாது. | ஒரு கூறு இருப்பதால், மேக்ரோ செல்லுபடியாகும் அல்லது உள்ளடக்கம் பாதுகாப்பானது என்று அர்த்தமல்ல |
| கோப்பு தொகுப்பில் வெளிப்புற இணைப்பு கூறுகள் உள்ளன | தொகுப்பிற்குள் அதன் இருப்பிடத்தைப் பதிவுசெய்கிறது, இலக்கை அணுகாது | ஸ்கிரிப்ட் சரக்குகளை மட்டுமே செய்கிறது மற்றும் இலக்கை அணுக முடியுமா என்பதை சரிபார்க்காது. |
| Keep_vba=True உடன் ஏற்றவும் | இது ஒரு ஏற்றுதல் உத்தி என்று நினைக்கிறேன் | Keep_vba=உண்மை என்பது ஒரு தக்கவைப்புக் கொள்கை, மேக்ரோ கண்டறிதலின் ஆதாரம் அல்ல |
##ஏன் இயல்புநிலை ஏற்றுதல் முக்கிய தகவலை இழக்கும்
அதிகாரப்பூர்வ openpyxl ஆவணம் load_workbook ஆனது செல் அல்லாத தரவை செயலாக்குவதற்கான தெளிவான எல்லைகளைக் கொண்டுள்ளது என்று கூறுகிறது. keep_links ஆனது True க்கு இயல்புநிலையாகும், இது XML இல் இணைப்பு வரையறையைத் தக்க வைத்துக் கொள்கிறது, ஆனால் மறுஏற்றத்திற்குப் பிறகும் வெளிப்புற தரவு கேச் (கேச் செய்யப்பட்ட மதிப்புகள்) செல்லுபடியாகும் என்பதற்கு உத்தரவாதம் அளிக்காது. அசல் நெட்வொர்க் சூழல் அல்லது மூல கோப்பு பாதையை நீங்கள் விட்டுவிட்டால், எக்செல் புதுப்பிக்கும்போது பிழையைப் புகாரளிக்கலாம்.
keep_vba இயல்புநிலை False க்கு. அசல் கோப்பில் மேக்ரோக்கள் இருந்தால், இயல்புநிலையாக ஏற்றிச் சேமித்த பிறகு VBA திட்டம் அகற்றப்படும். படிக்கும் போது விளக்கப்படங்கள் மற்றும் வடிவங்கள் போன்ற பொருள்களும் புறக்கணிக்கப்படலாம்.
இவை பிழைகள் அல்ல, ஆனால் நூலகத்தின் செயல்பாட்டு எல்லைகள். தயாரிப்பு-நிலை கோப்புகளுடன் பணிபுரியும் போது, கருவி தானாகவே அனைத்து அம்சங்களையும் தக்கவைத்துக்கொள்ளும் என்று கருதாமல், தக்கவைப்பு கொள்கையை வெளிப்படையாக அறிவிக்க வேண்டும்.
செயற்கை உதாரணங்கள் மற்றும் சோதனை கோப்பு தயாரித்தல்
இந்த பொறிமுறையை பாதுகாப்பாக நிரூபிக்க, உண்மையான வாடிக்கையாளர் தரவை நம்பாத ஒரு செயற்கை காட்சியை உருவாக்க பரிந்துரைக்கப்படுகிறது.
சோதனைக் கோப்புகளைத் தயாரிக்கவும்
- புதிய எக்செல் பணிப்புத்தகத்தை உருவாக்கவும்.
- VBA எடிட்டரில் (Alt+F11) வெற்று தொகுதியைச் செருகவும்.
- செல் A1 இல்
='[ExternalBook.xlsx]Sheet1'!$A$1சூத்திரத்தை உள்ளிடவும். உண்மையான வெளிப்புற கோப்பை உருவாக்க வேண்டிய அவசியமில்லை, இந்த குறிப்பு கட்டமைப்பை வைத்திருங்கள். - மேக்ரோ-இயக்கப்பட்ட வடிவத்தில்
input_check.xlsmஇல் சேமிக்கவும்.
பொதுவான தவறுகள் மற்றும் எல்லை உள்ளீடு
- இயல்புநிலை
load_workbook('input_check.xlsm')ஐப் பயன்படுத்தி மேக்ரோ-செயல்படுத்தப்பட்ட கோப்புகளை ஏற்றும்போது VBA குறியீடு அமைதியாக நிராகரிக்கப்படும், பின்னர்.xlsxஆக சேமிக்கப்படும். - ஏற்றும்போது
keep_vba=Trueகுறிப்பிடப்படாமல்,.xlsmஎன வலுக்கட்டாயமாகச் சேமிக்கப்பட்டால், கோப்புத் தலைப்பு உண்மையான உள்ளடக்கத்துடன் பொருந்தாததால், Excel திறக்க மறுக்கலாம். - படிக்க-மட்டும் பயன்முறையில் (
read_only=True),keep_linksமற்றும்keep_vbaஅளவுருக்கள் தவறானவை மற்றும் பண்புகளைப் பாதுகாக்கும் எந்த முயற்சியும் தோல்வியடையும்.
சரிபார்ப்புக் குறியீடு வெளிப்புற இணைப்புகள் மற்றும் மேக்ரோக்களுக்காக ஒதுக்கப்பட்டுள்ளது
பின்வரும் உதாரணம் அளவுருக்களின் பங்கை நிரூபிக்க நினைவகத்தில் தர்க்கத்தை சரிபார்க்கிறது.
from io import BytesIO
from zipfile import ZipFile
from openpyxl import Workbook
def inventory(raw):
with ZipFile(BytesIO(raw)) as z:
names = set(z.namelist())
return {"has_vba_part": "xl/vbaProject.bin" in names,
"external_link_parts": sorted(n for n in names if n.startswith("xl/externalLinks/externalLink") and n.endswith(".xml"))}
out = BytesIO()
Workbook().save(out)
assert inventory(out.getvalue()) == {"has_vba_part": False, "external_link_parts": []}
synthetic = BytesIO()
with ZipFile(synthetic, "w") as z:
z.writestr("xl/vbaProject.bin", b"not executable VBA; fixture only")
z.writestr("xl/externalLinks/externalLink1.xml", b"<fixture/>")
result = inventory(synthetic.getvalue())
assert result["has_vba_part"]
assert result["external_link_parts"] == ["xl/externalLinks/externalLink1.xml"]
இந்த குறியீடு ஒரு கற்பித்தல் உதாரணம் மட்டுமே, முழுமையான கோப்பு பழுதுபார்க்கும் கருவி அல்ல, மேலும் உண்மையான உற்பத்தி சூழலில் செயல்படுத்தப்படவில்லை. இயங்கும் முன், மேலே குறிப்பிட்டுள்ளபடி input_check.xlsm தயார் செய்துள்ளீர்கள் என்பதை உறுதிப்படுத்தவும்.
📊 மைய ஒப்பீடு: இயல்புநிலை அளவுருக்கள் மற்றும் ஒதுக்கப்பட்ட அளவுருக்கள்
| அளவுரு | இயல்புநிலை மதிப்பு | செயல்பாடு | எல்லை |
|---|---|---|---|
| keep_links | True | XML இல் இணைப்பு வரையறையை தக்கவைத்துக் கொள்ளவும் | வெளிப்புற தரவு சேமிப்பகங்கள் மறு சேமிப்பிற்குப் பிறகு செல்லுபடியாகும் என்பதற்கு எந்த உத்தரவாதமும் இல்லை |
| keep_vba | False | இயல்பாக, VBA திட்டங்கள் தக்கவைக்கப்படாது | அதை உண்மையாக அமைப்பது என்பது மேக்ரோ உள்ளடக்கம் பாதுகாப்பானது அல்லது செல்லுபடியாகும் என்று அர்த்தமல்ல |
| read_only | False | படிக்க மட்டும் பயன்முறையில் ஏற்றவும் | இந்த பயன்முறையில், keep_links மற்றும் keep_vba பயனற்றவை |
ஏற்றுக்கொள்ளும் அளவுகோல்கள் மற்றும் கையேடு மதிப்பாய்வு எல்லைகள்
ஆட்டோமேஷன் எக்செல் இல் உள்ள அனைத்து விளிம்பு வழக்குகளையும் மறைக்க முடியாது. ஸ்கிரிப்ட்களால் எந்த சூழ்நிலைகள் மதிப்பாய்வு செய்யப்பட வேண்டும் மற்றும் எவற்றை இடைமறித்தல் அல்லது கையேடு கையாளுதல் தேவை என்பதை வேறுபடுத்திப் பார்க்க கீழே உள்ள அட்டவணை பயன்படுத்தப்படுகிறது.
| அவதானிப்பு | என்ன செய்ய வேண்டும் | மற்றும் தீர்ப்பளிக்கப்படக்கூடாது |
|---|---|---|
| ஒரு VBA கூறு உள்ளது | குறிப்பு: தனி மதிப்பாய்வு தேவைப்படும் உள்ளடக்கத்தைக் கொண்டுள்ளது | மேக்ரோ மரணதண்டனை இல்லை |
| வெளிப்புற இணைப்பு கூறுகள் | தொகுப்பின் உள்ளே இருப்பிடத்தைப் பதிவு செய்யவும் | இலக்கை அடைய அணுகல் இல்லை |
| அளவுருக்களை இயக்கவும் | இதை ஒரு ஏற்றுதல் உத்தியாகக் கருதுங்கள் | மேக்ரோக்களைக் கண்டறிவதற்கான ஆதாரமாக இது கருதப்படக்கூடாது |
அளவுருக்கள் பயனுள்ளதா என்பதை ஸ்கிரிப்ட்கள் சரிபார்க்க முடியும், ஆனால் வெளியீட்டு கோப்புகள் வணிக மட்டத்தில் கிடைக்கின்றன என்று உத்தரவாதம் அளிக்க முடியாது. எடுத்துக்காட்டாக, keep_links=True இணைப்பு வரையறையை வெற்றிகரமாக பாதுகாத்துள்ளது. இலக்கு சேவையகம் ஆஃப்லைனில் இருந்தால், எக்செல் இல் புதுப்பிக்கும் போது பயனர்கள் இன்னும் பிழைகளைப் பெறுவார்கள். இந்த சிக்கல்கள் ஆவண செயலாக்க நூலகத்தின் பொறுப்புகளை மீறுகின்றன மற்றும் ஏற்றுக்கொள்ளும் செயல்பாட்டில் கையேடு மதிப்பாய்வு படி தேவைப்படுகிறது.
குறிப்புகள்
ஆவண மொழிபெயர்ப்புக்கு இந்த சரிபார்ப்பு பட்டியலைப் பயன்படுத்தவும்
சூத்திரங்கள் மற்றும் வணிகக் குறியீடுகளைக் கொண்ட அட்டவணைகளைச் செயலாக்கும்போது, எந்த உள்ளடக்கம் உரை மற்றும் எது சூத்திரங்கள், அடையாளங்காட்டிகள் மற்றும் வணிகக் குறியீடுகள் என்பதை முதலில் வேறுபடுத்தி, பின்னர் மொழிபெயர்க்கவும். மொழிபெயர்ப்புக்குப் பிந்தைய ஆய்வு சீன மொழி இலக்கு மொழியாக மாற்றப்பட்டுள்ளதா என்பதை சரிபார்ப்பது மட்டுமல்லாமல், சூத்திரங்கள், அடையாளங்காட்டிகள் மற்றும் மேற்கோள் உறவுகள் மாற்றப்படவில்லை என்பதையும் உறுதிப்படுத்துகிறது.
OmniDoc (தயாரிப்பு நுழைவு) பல வடிவ ஆவண மொழிபெயர்ப்பு போர்ட்டல்களை வழங்குகிறது, மேலும் அதிகாரப்பூர்வ இணையதளம் OCR, சொற்களஞ்சியங்கள் மற்றும் இருமொழி குறிப்பு அம்சங்களை அறிமுகப்படுத்துகிறது. கோப்பில் இருந்து நேரடியாகத் தொடங்க விரும்பும் அணிகளுக்கு, உண்மையான மாதிரிகளைப் பயன்படுத்தி இந்த பாதையை மதிப்பீடு செய்யலாம். இந்த கட்டுரையில் உள்ள சரிபார்ப்பு பட்டியலுடன் பதிவேற்ற மற்றும் முடிவுகளை சரிபார்க்க நீங்கள் அங்கீகரித்த அநாமதேய கோப்பைப் பயன்படுத்தவும். OmniDoc இந்த கட்டுரையில் குறிப்பிடப்பட்டுள்ள திறந்த மூல நூலகங்கள் அல்லது உள் வழிமுறைகளைப் பயன்படுத்துகிறது என்று இது கூறவில்லை, அல்லது இது தயாரிப்பு செயல்திறன் சோதனையை எடுத்துக்காட்டுகளுடன் மாற்றாது.
🎯 எந்த முறை உங்களுக்கு பொருத்தமானது?
நீங்கள் மேக்ரோக்களைக் கொண்ட செயல்முறை கோப்புகளை தொகுதி செய்ய வேண்டும் என்றால்
முதலில், தக்கவைப்பு மூலோபாயத்தை தெளிவுபடுத்த keep_vba=True ஐப் பயன்படுத்தவும், பின்னர் சோதனைச் சூழலில் வெளியீட்டு முடிவுகளை ஒப்பிடவும். மேக்ரோக்கள் தானாகவே தக்கவைக்கப்படும் என்று கருத வேண்டாம்.
உங்கள் எக்செல் வெளிப்புற இணைப்புகளைக் கொண்டிருந்தால்
முதலில், தொகுப்பின் உள்ளே இணைப்பு கூறுகளின் இருப்பிடத்தை பதிவு செய்யவும்; ஸ்கிரிப்டில் இணைப்பு இலக்கை அணுக வேண்டாம். மீண்டும் சேமித்த பிறகு, புதுப்பிப்பு இயல்பாக உள்ளதா என்பதை கைமுறையாக உறுதிப்படுத்தவும்.
நீங்கள் தரவை மட்டுமே படிக்க வேண்டும் என்றால்
நீங்கள் படிக்க மட்டும் பயன்முறையைக் கருத்தில் கொள்ளலாம், ஆனால் இந்த பயன்முறையில், keep_links மற்றும் keep_vba அளவுருக்கள் தவறானவை என்பதை நினைவில் கொள்க.
கோப்பு கிளையண்டிலிருந்து வந்தால் மற்றும் முக்கியமான உள்ளடக்கத்தைக் கொண்டிருந்தால்
முதலில், அசலை வைத்திருங்கள், சோதனைக்கு உணர்திறன் இல்லாத மாதிரியைப் பயன்படுத்தவும், பின்னர் ஏற்றுக்கொள்ளும் உருப்படிகளின்படி முடிவுகளை மதிப்பாய்வு செய்யவும்.
❓ அடிக்கடி கேட்கப்படும் கேள்விகள் (FAQ)
1. keep_links=உண்மை என்றால் வெளிப்புற இணைப்புகள் எப்போதும் கிடைக்கின்றனவா?
இல்லை. keep_links ஆனது XML இலிருந்து இணைப்பு வரையறைகளைத் தக்கவைத்துக் கொள்கிறது, ஆனால் மறு சேமிப்பகத்திற்குப் பிறகு வெளிப்புற தரவு தற்காலிக சேமிப்பகங்கள் செல்லுபடியாகும் என்பதற்கு உத்தரவாதம் அளிக்காது. இலக்கைப் புதுப்பிப்பது அணுக முடியாதபோது பிழைகளை ஏற்படுத்தக்கூடும்.
2. இயல்பாக ஏற்றி சேமிக்கும்போது மேக்ரோக்களுக்கு என்ன நடக்கும்?
keep_vba ஆனது False க்கு இயல்புநிலையாக உள்ளது, மேலும் அசல் கோப்பில் உள்ள VBA திட்டம் சேமிக்கப்படும்போது அகற்றப்படும். நீங்கள் அதை வைத்திருக்க வேண்டும் என்றால், நீங்கள் வெளிப்படையாக keep_vba=True ஐ அமைக்க வேண்டும்.
3. ஒரு VBA கூறு கண்டறியப்பட்டால், மேக்ரோ பாதுகாப்பானதா என்பதை ஸ்கிரிப்ட் தீர்மானிக்க முடியுமா?
இல்லை. கூறுகளின் இருப்பு உள்ளடக்கம் பாதுகாப்பானது அல்லது மேக்ரோக்கள் செல்லுபடியாகும் என்று அர்த்தமல்ல; ஸ்கிரிப்ட்கள் மேக்ரோக்களை இயக்கக்கூடாது மற்றும் மேலும் மதிப்பாய்வைத் தூண்ட வேண்டும்.
4. இணைப்புகள் மற்றும் மேக்ரோக்களை படிக்க மட்டும் பயன்முறையில் பாதுகாக்க முடியுமா?
இல்லை. read_only=True பயன்முறையில், அளவுருக்கள் keep_links மற்றும் keep_vba தவறானவை.
📝 சுருக்கம்
எக்செல் மீட்டெடுப்பதற்கு முன், முதல் இன்வென்டரி VBA மற்றும் வெளிப்புற இணைக்கப்பட்ட கூறுகள், அளவுருக்களை தெளிவாக ஏற்றவும், மற்றும் கையேடு மதிப்பாய்வு படிகளைத் தக்கவைத்துக் கொள்ளவும். அடுத்து, சோதனை சூழலில் மூன்று மாதிரி கோப்புகளை நீங்கள் தயாரிக்கலாம் (தூய தரவு .xlsx, மேக்ரோ .xlsm மற்றும் வெளிப்புற இணைப்புகளுடன் .xlsx), முறையே இயல்புநிலை மற்றும் ஒதுக்கப்பட்ட அளவுருக்களைப் பயன்படுத்தி அவற்றை ஏற்றி சேமித்து, மேலே உள்ள அட்டவணைக்கு எதிராக உண்மையான முடிவுகளை பதிவு செய்யலாம். உங்கள் கோப்பு தொகுப்பில் உள்ள ஒவ்வொரு அளவுருவின் விளைவுகளையும் நீங்கள் புரிந்துகொண்டால் மட்டுமே தயாரிப்பு செயல்பாட்டில் ஸ்கிரிப்ட்களைப் பயன்படுத்துவது பொருத்தமானது.


