עבור לתוכן

קריאה לפעולות אקסל מחוץ לתוכנה

Featured Replies

פורסם

אני מתכנת ב ++visual C ויצרתי קובץ טקסט שהוא בעצם עמודות בגרף מופרד בטאבים.

האם אפשר לקרוא מהC לאקסל שייצור מהקובץ גרף?

פורסם

אפשר, עשיתי את זה (כבר פעמיים, למען האמת)

אתה צריך לעבוד עם automation בשביל זה.

ולמען האמת - יותר קל לעשות את זה ב- VB או דלפי מאשר ב- VC.

פורסם
  • מחבר

חבר'ה, דבר ראשון תודה רבה

בקשר לתגובה הראשונה:

נכנסתי ללינק ובאמת כתוב שם ממש ברור איך לעשות את זה - הצרה היא, באמת שמדובר על managed C ונעולם לא עבדתי עם התוכנה, זה פשוט להיכנס לזה?

בקשר לתגובה השנייה:

שוב, אני מתכנת חדש ולכן אולי תצחק כשאשאל - איך משתמשים ב automation? אבל...

בכל מקרה ממש תודה, אם תוכלו להמשיך לעזור לי אני ממש אשמח, וגם אתרים טובים על איך לעשות את זה ב VB לא יזיקו.

חוץ מזה אני עדיין מנסה למצוא דרך לעשות את זה בVC++6 הישן שאני משתמש בו. אם אני אמצא דרך למתכנת המתחיל אני אפרסם.

פורסם

automation זה אומר שאתה יכול להפעיל את התוכנה מבחוץ.

יש פירוט של כל האובייקטים של Office ב- help תחת help for visual basic, למרות שאפשר להשתמש בהם מכל שפה (אתה רק צריך לעשות import ל- type library של office)

בעיקרון, אתה משתמש באובייקט "מסמך" שבתוכו יש אובייקטים ל- Cells, graphs, Selection (ועוד הרבה) ומשתמש בפונקציות שלהם.

פורסם

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

זה דיי פשוט .

פורסם
  • מחבר

DarkMatter , אם אתה יכול אני אשמח לראות

Boomerang, אוקי אבל איך אני עושה לform כזה export? ואז איך אני קורא אותו ל C? להכניס אותו כresource? דרך אגב ראיתי בclass wizard תת-תפריט שנקרא automation זה קשור?

פורסם

אתה מתכוון לדבר כזה .?

[attachment deleted by admin]

פורסם

export לאיזה form?

בעיקרון, אתה צריך לייבא את ה- type library של office. עם האובייקטים שם אתה לא עובד בצורה ויזואלית, אלא ב"שלט רחוק" על האפליקציה (אקסל) שרצה ויכולה להיות נסתרת אם אתה לא רוצה להראות אותה.

בעיקרון הפעולות שאתה תצטרך הן (כולן דרך automation) הן פתיחת קובץ, בחירת השטח לגרף, יצירת הגרף, ושמירה/העתקה של הגרף או של התמונה שלו.

הנה חתיכת קוד (בדלפי, אומנם, אבל זה כמעט אותו דבר בכל שפה) מפרוייקט שעשיתי פעם שמראה איך ליצור גרף מקובץ נתונים.

מה שהוא עושה זה לקרוא פרמטרים מ- node של XML שמתאר את הגרף, יוצר את הגרף ומעתיק אותו למסמך ה- word שייצרתי.

אני מקווה שאפשר להבין את הקוד הזה, אבל אם לא - אני אוכל להסביר.


procedure TfrmMain.ExecuteGraphPlaceHolder(node: IXMLNode;
range: OleVariant);
var
ChartType : TChartType;
ExcelWB : OleVariant;
varTrue, varFalse, filename, xlChartType, XLRangeStr,
XLChart,chartTitle, labelsType, ExcelWS, Excelfileformat,ExcelLegendPos
: OleVariant;
chart3D, ShowLegend : boolean;
begin
varTrue:=True;
varFalse:=false;
filename:=datadir+'\'+node.Attributes['filename'];
ExcelWB:=Unassigned;
try
ExcelWB:=ExcelApp.Workbooks.Open(filename,EmptyParam,true,EmptyParam, EmptyParam,
EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,
EmptyParam,EmptyParam,0);
FileName:=ExtractFilePath(paramStr(0))+'reporter_temp.xls';
ExcelFileFormat:=xlExcel9795;
ExcelWB.SaveAs(filename,ExcelFileFormat);
ChartType:=strToChartType(node.Attributes['GraphType']);
chart3D:=node.Attributes['Use3D']='1';
xlChartType:=getExcelType(ChartType,chart3D);
XLrangeStr:=node.Attributes['Range'];
chartTitle:=node.Attributes['Title'];
if node.Attributes['Labels']=Null
then labelsType:=GetExcelType(ltNone)
else labelsType:=GetExcelType(StrToLabelType(node.Attributes['Labels']));
ShowLegend:=node.Attributes['ShowLegend']='1';
if ShowLegend and (node.Attributes['LegendPosition']<>Null)
then ExcelLegendPos:=GetExcelType(StrToLegendPosition(node.Attributes['LegendPosition']));
ExcelWS:=ExcelWB.ActiveSheet;
if xlRangeStr<>Null then ExcelWS.Range[xlRangeStr].Select
else ExcelWS.usedRange.Select;
XLChart:=ExcelWB.Charts.Add;
XLChart.Type:=xlChartType;
XlChart.HasTitle:=ChartTitle<>Null;
XLChart.ChartTitle.Text:=chartTitle;
XLChart.ApplyDataLabels(labelsType);
XLChart.hasLegend:=ShowLegend;
if ShowLegend
then XLChart.Legend.Position:=ExcelLegendPos;
if node.Attributes['CategoryTitle']<>Null
then begin
XLChart.Axes(xlCategory).HasTitle:=true;
XLChart.Axes(xlCategory).AxisTitle.Caption:=node.Attributes['CategoryTitle'];
end;
if node.Attributes['ValuesTitle']<>Null
then begin
XLChart.Axes(xlValue).HasTitle:=true;
XLChart.Axes(xlValue).AxisTitle.Caption:=node.Attributes['ValuesTitle'];
end;

// XLChart.Copy will result copy of the picture only.
XLChart.ChartArea.Copy;
range.Paste;
finally
ExcelWB.Close(false);
DeleteFile(ExtractFilePath(paramStr(0))+'reporter_temp.xls');
end;
end;

  • 2 שבועות מאוחר יותר...
פורסם
  • מחבר

חבר'ה תודה רבה על העזרה,

bomerang אני צריך קצת זמן לעכל את מה שכתבת (אני עובר על הפקודות)

DarkMatter אם תוכל לתת לי את הקוד אני אשמח.

בכל מקרה מצאתי דרך פשוטה, קצת עקומה ולא תיכנותית אבל פשוטה - אני פשוט משתמש בקובץ אקסל שכתבתי לו פרוצדורת onopen שעושה את מה שאני צריך, ואז אני קורא לו דרך ה shell. אני יודע שזה קצת מגעיל אבל זו גם דרך.

ארכיון

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

דיונים חדשים