עבור לתוכן

המרת טבלה באקסל למערך בC#

Featured Replies

פורסם

שלום

אני רוצה להמיר טבלה בקובץ אקסל למערך (דו מימדי) בC#

נניח וקיים קובץ אקסל במחשב, בשם book1, וב sheet1 כל התאים בטווח A1 עד C3 מלאים במספרים שלמים.

איך אני אומר לC# ללכת לתאים A1:C3 שבsheet1 שבקובץ book1 ולהמיר את התאים האלה למערך int דו מימדי?

ואיך אני עושה הכל רק הפוך?

כלומר יש לי מערך int דו מימדי בc#, ואת המערך הזה אני מעתיק לתאים מסויימים בsheet1 שבbook1..

תודה רבה :xyxthumbs:

אסף

פורסם
  • מחבר

זריז אתה :yelclap:

בלינק הראשון שנתת אומרים להוסיף ממשק בשם microsoft excel 12.0 object library

אצלי מופיע רק microsoft excel 14.0 object library

האם זה טוב?

תודה

אסף

פורסם

אני מנחש שזה קשור לגרסת האופיס שמותקנת אצלך.

פורסם

מה בדיוק הדרישות של מה שאתה עושה? כי הקובץ אקסל שאתה מתאר יכול להיות מתואר בצורה מאד פשוטה בקובץ CSV, איתו יהיה לך הרבה יותר קל לעבוד.

מכיוון שאקסל יודע לייבא ולייצא CSV, אולי יש אפשרות לעבוד מול זה ולחסוך כאב ראש.

פורסם

זריז אתה :yelclap:

בלינק הראשון שנתת אומרים להוסיף ממשק בשם microsoft excel 12.0 object library

אצלי מופיע רק microsoft excel 14.0 object library

האם זה טוב?

תודה

אסף

לדעתי ההבדל זניח,

אם תתקל בבעיות עם המדריך תרשום כאן וננסה לעזור.

פורסם
  • מחבר

מה בדיוק הדרישות של מה שאתה עושה? כי הקובץ אקסל שאתה מתאר יכול להיות מתואר בצורה מאד פשוטה בקובץ CSV, איתו יהיה לך הרבה יותר קל לעבוד.

מכיוון שאקסל יודע לייבא ולייצא CSV, אולי יש אפשרות לעבוד מול זה ולחסוך כאב ראש.

האמת שאני מתעסק עם CSV.

אני מנסה לנתח באמצעות C# מניות מהבורסה.

כל הנתונים על המניות נמצאים בקבצי CSV, ובנתונים האלה אני צריך להשתמש, רק שאני לא יודע איך "לגשת" אליהם.

DARKENERGY הוספתי את הממשק, והעתקתי את קטע הקוד כפי שרשום באתר,

וישנן הרבה שגיאות.

הנה תמונת מסך

(מקווה שתצליחו לראות משהו)

האמת שלא הבנתי כלום מהקוד שהעתקתי (אולי כי הידע שלי מסתכם רק ב5 יחידות מחשבים?)

אני לא מבין איפה אני נכנס לתמונה ואומר למחשב לאיזה קובץ לגשת, ואיזו טבלה להמיר למערך...? :kopfpatsch:

any help?

תודה :)

אסף

פורסם

אם זה קובץ CSV אתה לא צריך ספריות של אקסל, אתה יכול פשוט לקרוא את המידע כמו קריאה מקובץ רגיל (StreamReader כלשה) ואז להפריד אותו עם String.Split למשל. זה הרבה יותר קל, לדעתי...

פורסם

בכלליות interop עם אופיס הוא בעייתי, תדרש ללכת רחוק בשביל אשכרה בסוף לצליח לסגור את הprocess בצורה נורמלית מבלי להרוג אותו.

החוקים הכללים לעבודה עם comobjects:

רק נקודה אחת,מה הכוונה-

אם יש לך ביטוי כזה

app.worksheet.cells

קודם קח את app.worksheet ותציב אותו במשתנה ואז תפנה לcells.

תדאג שבסוף העניין אתה מנתק את כל אותם משתנים (להציב Null ידנית!)

ועושה להם marshal בסוף.

ואל תשכח לקרוא לapp.close()/dispose.

בכלליות- אם אתה יכול תעבוד עם CSVים, זה יחסוך לך הרבה כאב ראש.

פורסם
  • מחבר

בכלליות- אם אתה יכול תעבוד עם CSVים, זה יחסוך לך הרבה כאב ראש.

אני עובד עם CSV, וכבר קיבלתי מיגרנה :)

באמת שחשבתי שזה יהיה קצת יותר פשוט

חרשתי על גוגל, האמת שיש על זה מידע, הבעיה היא שאני לא מבין אותו.

אתם מכירים אולי מדריך כלשהו (גם באנגלית טוב) שמסביר מהבסיס (לאחד שיש לו רק את הבסיס :-\ ) איך עושים את זה?

פורסם

יש לך קובץ CSV ביד שלפי התאור שלך אמור להראות משהו כזה:


1,2,3
4,5,6
7,8,9

אתה צריך לקרוא את הקובץ הזה, שורה שורה וכל שורה להכניס למערך ולסגור עניין. משהו בכיוון הזה:


const int ROWS = 3;


string[][] numbers = new string[ROWS][];


using (StreamReader sr = new StreamReader(@"c:\book1.csv"))
{
for (int row = 0; row < ROWS; row++)
{
numbers[row] = sr.ReadLine().Split(',');
}
}

אם אתה לא יודע מראש מה מספר השורות אז תרוץ עד EndOfFile במקום לפי מספר ואם אתה צריך את זה במטריצה של int אז תמיר את זה על ידי int.Parse איפה שצריך.

זה עוזר לך? זה הכיוון לפחות?

פורסם

למה לעבוד עם מערך כשאפשר לעבוד עם רשימה (List)? ככה לא צריך את הקבוע ROWS (בעצם, אפילו לא צריך StreamReader - אפשר פשוט להשתמש ב-File.ReadLines).

עם Linq אפשר אפילו לכתוב הכל בשורה אחת:

var numbers = 
from row in File.ReadLines(@"c:\book1.csv")
select row.Split(',');

או אם אתה לא אוהב את התחביר הLinqי:

var numbers = File.ReadLines(@"c:\book1.csv").Select(row => row.Split(','));

פורסם

למה? כי אני תקוע בג'וב שהמנהלים בו חושבים ש-VS 2003 הוא הצעקה האחרונה... ואני, לצערי, תקוע שם יחד איתם :-\

במלים אחרות, כמובן שהפתרון השניצלי (כרגיל) עדיף :xyxthumbs:

פורסם

List היה גם ב-VS2003... בכל מקרה עדיף להשתמש בו על פני מערך. ואם יש VS2008 ומעלה אז אפשר Linq :)

ארכיון

דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.

דיונים חדשים